我在以下代码中收到无效内存错误:
printf(" %s\n","FINE 5");
printf("%s LENGTH IS: %d\n","FINE 6",strlen(": "));
buffer = (char *)realloc(buffer, strlen(buffer)* sizeof(char) + (strlen(": ")+1)* sizeof(char));
printf(" %s\n","FINE 7");
strcat(buffer, ": \0");
Output:
FINE 5
细 6 长度为:2
* 检测到 glibc *./auto: realloc(): 下一个大小无效: 0x08cd72e0 ***
======= 回溯: ========= /lib/tls/i686/cmov/libc.so.6(+0x6b591)[0x6dd591]
这里需要注意的一点是Fine 7
从未被打印。每次运行时无效的下一个大小错误都位于同一位置。
Found this https://stackoverflow.com/questions/2939091/realloc-invalid-next-size相关的
发生此错误的原因是代码的某些其他部分损坏了堆。如果没有看到代码的其余部分,我们无法告诉您该错误是什么。
事实是FINE 7
没有打印告诉你realloc
正在失败。那次失败一定是因为buffer
由于执行早期的堆损坏而无效。
与您的实际问题正交,sizeof(char)
is 1
根据定义,因此从代码中删除它是有意义的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)