初始C代码
char* longestPalindrome(char* s) {
......
......
char *hui=(char *)malloc(sizeof(max));
for(i=0;low<=high;i++,low++){
hui[i]=s[low];
}//low和high为回文在原字符串中的下标位置,这里我想将其复制到另一个数组hui中
return hui;
}
int main()
{
char *s="cbbd";
char *huiwen;
huiwen=longestPalindrome(s);
printf("%s",huiwen);
}
报错
AddressSanitizer: heap-buffer-overflow on address 0x602000000034 at pc 0x564385dbdc0a
本人喜欢在dev上调试程序C程序。最开始我设置的hui指针并不是malloc,而是直接开辟了一个char型数组,但主函数得到的返回值一直为NULL。
在看了一些资料过后,我用malloc动态开辟,但奇怪的是在dev里明明都能完全通过显示出正确的回文,但是Leetcode上就是出现上述报错
在看了其它人的解答过后,我决定在原字符串中改动,即如下
修改后的C代码
char* longestPalindrome(char* s) {
......
......
s[high+1] = '\0';
return s+low;
}
int main()
{
char *s="cbbd";
char *huiwen;
huiwen=longestPalindrome(s);
printf("%s",huiwen);
}
of course直接将首地址改变,并将回文后面的字符用’\0’挡掉,再返回首地址。呃,emm~~怎么说呢?感觉自己low爆了。虽然也还是没有搞懂我的代码在Leetcode报错的点(可能是自己编写得不规范吧),但是… type*类型的一定要动态开辟这是真的