编译器报错: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;
}


目录
相关文章
|
8月前
|
存储 算法 搜索推荐
C语言找出最大值在数组中的位置
C语言找出最大值在数组中的位置
182 0
|
存储 C语言
找到所有数组中消失的数(C语言详解)
找到所有数组中消失的数(C语言详解)
72 0
|
3月前
|
C语言
C语言:哪些情况下会出现野指针
C语言中,野指针是指指向未知地址的指针,通常由以下情况产生:1) 指针被声明但未初始化;2) 指针指向的内存已被释放或重新分配;3) 指针指向局部变量,而该变量已超出作用域。使用野指针可能导致程序崩溃或不可预测的行为。
|
C语言
【C语言】刨析数组作为函数参数时可能会出现的问题以及对应的解决方法
【C语言】刨析数组作为函数参数时可能会出现的问题以及对应的解决方法
72 0
|
C语言
C语言操作符优先级表格(建议收藏,每次看一下)
C语言操作符优先级表格(建议收藏,每次看一下)
|
C语言
C语言:计算n的阶乘(不考虑溢出)
题目: 从键盘输入一个值n,计算n的阶乘, 如:输入5,计算5的阶乘 --> 5! = 1 * 2 * 3 * 4 * 5
121 0
|
安全 编译器 C语言
VS编译器警告scanf未定义的三种解决办法
我们开始学习编程时候上手第一门语言通常是C语言,我们还需要下载一个编译器,最常见的莫过于Microsoft公司开发的Visual Studio(下面都简称VS)系列编译器,但是VS中我们使用scanf等函数时语句总是报错,显示不安全。
VS编译器警告scanf未定义的三种解决办法
|
编译器 C语言 C++
C语言数组越界造成的死循环例子,当你得到了这个意想不到的结果的时候,你肯定不知道为什么,看你还敢不敢越界访问数组了
C语言数组越界造成的死循环例子,当你得到了这个意想不到的结果的时候,你肯定不知道为什么,看你还敢不敢越界访问数组了
126 0
|
C语言
c语言之判断if语句
c语言之判断if语句
214 0
c语言之判断if语句
|
程序员 编译器 C语言
C语言常见问题之数组越界与溢出
C语言常见问题之数组越界与溢出
545 0
C语言常见问题之数组越界与溢出

热门文章

最新文章