LeetCode最长回文子串C++代码出现数组越界Runtime Error求助
为什么C++中
"" + s[i]会触发数组越界错误? 错误根源
你遇到的index 98 out of bounds问题,核心是C++和Python对字符串拼接的底层逻辑完全不同:
- 在C++里,
""是**const char[1]类型的字符串字面量**,本质是指向仅包含终止符'\0'的字符数组的指针。 - 执行
"" + s[i]时,s[i]作为char类型会被隐式转换成对应的ASCII整数值(比如字符'b'的ASCII是98),此时操作变成指针加法:把""的起始地址加上这个整数值,直接跳到了数组边界外的内存区域,触发越界错误。
而Python里的""是字符串对象,+操作符会自动将字符转为字符串再拼接,所以不会出现这类问题。
修复方法
把第8行代码改成以下任意一种写法即可:
- 用string构造函数直接初始化:
string current(1, s[i]);
- 先创建空字符串再追加字符:
string current; current += s[i];
- 显式将char转为string:
string current = string(1, s[i]);
额外提示
你的内层循环用j = len跳出的写法不符合C++规范,建议换成break提升可读性;同时注意current = s[i-j] + current + s[i+j]也存在类似问题,需要把单个char转成string再拼接:
if (i+j >= len || i-j < 0 || s[i-j] != s[i+j]) break; else current = string(1, s[i-j]) + current + string(1, s[i+j]);
内容的提问来源于stack exchange,提问作者Hunter
相关产品推荐
相关产品推荐

