编译器报错:qsort函数对-2147483648、2147483648溢出报错

简介: 编译器报错:qsort函数对-2147483648、2147483648溢出报错

今天在刷leetcode,遇到一个测试案例没过,报错如下

runtime error: signed integer overflow: 1 - -2147483648 cannot be represented in type 'int' [solution.c]

int的范围明明是-2147483648 ~ 2147483647,我想破脑袋也没想到为什么会溢出?

又将代码搬到VS上运行试试,仍然是溢出,报错如下

error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型

经过网上翻阅帖子,终于在大佬的博客中找到了答案,原文链接如下C语言qsort()函数对-2147483648、2147483648溢出报错_char 47: runtime error: signed integer overflow: -_xx与oo的博客-CSDN博客

原因?

原因就是使用qsort函数时,其中的比较函数cmp,当e2为 -2147483648 时,再减去e1,结果返回就溢出了

int cmp(const void *e1,const void *e2)
{
    return *(int*)e2 - *(int*)e1;
}

如何解决?

将 - 改为 > 即可,这样就不会出现溢出的情况

int cmp(const void *e1,const void *e2)
{
    return *(int*)e2 > *(int*)e1;
}


目录
相关文章
一篇文章让你看懂C语言字符函数和内存函数(上)
一篇文章让你看懂C语言字符函数和内存函数(上)
|
3月前
|
C语言
C语言:哪些情况下会出现野指针
C语言中,野指针是指指向未知地址的指针,通常由以下情况产生:1) 指针被声明但未初始化;2) 指针指向的内存已被释放或重新分配;3) 指针指向局部变量,而该变量已超出作用域。使用野指针可能导致程序崩溃或不可预测的行为。
|
5月前
|
测试技术
hyengine 编译问题之取出具体数值如何解决
hyengine 编译问题之取出具体数值如何解决
|
6月前
|
Python
python语法错误变量未定义
【7月更文挑战第9天】
108 1
|
7月前
|
C语言 C++ 编译器
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
|
C语言
【C语言】刨析数组作为函数参数时可能会出现的问题以及对应的解决方法
【C语言】刨析数组作为函数参数时可能会出现的问题以及对应的解决方法
72 0
一篇文章让你看懂C语言字符函数和内存函数(下)
一篇文章让你看懂C语言字符函数和内存函数(下)
|
安全 编译器 C语言
VS编译器警告scanf未定义的三种解决办法
我们开始学习编程时候上手第一门语言通常是C语言,我们还需要下载一个编译器,最常见的莫过于Microsoft公司开发的Visual Studio(下面都简称VS)系列编译器,但是VS中我们使用scanf等函数时语句总是报错,显示不安全。
VS编译器警告scanf未定义的三种解决办法
|
C语言 C++
C语言字符函数和内存函数
本节内容重点就是学会使用一些字符函数和内存函数,并且去模拟几个重要的函数,了解和体会这个函数是怎么样去实现的。不知道各位寒假在家学习的怎样,一定要坚持学习啊。好了,话不多说,我们直接开始学习我们的函数吧。
C语言字符函数和内存函数
|
编译器 C语言 C++
C语言数组越界造成的死循环例子,当你得到了这个意想不到的结果的时候,你肯定不知道为什么,看你还敢不敢越界访问数组了
C语言数组越界造成的死循环例子,当你得到了这个意想不到的结果的时候,你肯定不知道为什么,看你还敢不敢越界访问数组了
129 0