今天在刷leetcode,遇到一个测试案例没过,报错如下
runtime error: signed integer overflow: 1 - -2147483648 cannot be represented in type 'int' [solution.c]
int的范围明明是-2147483648 ~ 2147483647,我想破脑袋也没想到为什么会溢出?
又将代码搬到VS上运行试试,仍然是溢出,报错如下
经过网上翻阅帖子,终于在大佬的博客中找到了答案,原文链接如下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; }