LeetCode常见错误
问题1:
Line 1034: Char 9: runtime error: reference binding to null pointer of type 'int' (stl_vector.h)
数组越界,可能出现下标为-1或者是下标出现size()-1的情况了
vector 的size函数返回vector大小,返回值类型为size_type,Member type size_type is an unsigned integral type,即无符号整数;
vector A;
A.size()-1因为size返回值是无符号类型所以 A.size()-1越界,是个很大的数
所以要用的时候
要么预先定义一个 int n = A.size() - 1;
或者int(A.size() - 1)或者int(A.size()) - 1
或者static_cast
以后一定要注意不要使用stl中的size做减法操作。所以写i<size() 不要写 <=size()-1
问题2:
Line 6: Char 48: runtime error: signed integer overflow: 2147483647 + 1 cannot be represented in type 'int' (solution.cpp)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:15:48
class Solution {
public:
int mySqrt(int x) {
int l = 0, r = x;
while(l < r){
long long mid = l + r + 1 >> 1;
if(mid * mid <= x) l = mid;
else r = mid - 1;
}
return l;
}
};
- 当程序中出现整型常量时,默认都是以int类型存储的
- 如果算术表达式中出现的所有的数字都是int型的,默认运算结果也是int类型
l + r + 1 >> 1 当 r 为 int 的最大值时,再+1会超出int范围会报错 正确做法:l + r + 1LL >> 1 把结果转换成long long类型
int 类型常见的坑
本文作者:Ac_c0mpany丶
本文链接:https://www.cnblogs.com/keyongkang/p/15144374.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步