参考题解 中心扩散法时,给出的代码是Java
用c++尝试编写出现
Line 1065: Char 9: runtime error: addition of unsigned offset to 0x7ffd110e96c0 overflowed to 0x7ffd
翻译一下
第1065行:字符9:运行时错误:向0x7ffd110e96c0添加无符号偏移量溢出到0x7ffd
一开始一直对比参考的Java代码,感觉没啥错误(百思不得其解)
再百度后看到这篇文章
指出问题所在
然后发现了与参考代码不同之处
我的
参考的
没错,就是前后顺序不同
由于我的代码中s[left]在前面,导致当left为0时,在进入下一个while 判断环节 出现了 s[-1],因此编译器首先报错,而参考的代码 则由于s[left]在后面,当检查前面的条件时,已经不满足条件,因此跳出while循环,没有报错。
如果要避免这样的情况,除了向参考一样,判决条件的顺序注意修改,此外还可改为
while( s[left]==s[i] ){ //注意对于字符串没有s[-1]->造成越界
left--;
ans_len++;
//增加的部分
if ( left <0 ){
break;
}
}
其他部分一样
总结
注意string不要越界 !!!