这是我认为可能导致此错误的简化程序。
原始项目比较复杂,因此我对其进行了简化。我使用malloc分配了8192字节的空间。然后我的程序会向数组中写入超过8192个字符。接着我会再次使用malloc来分配内存。
这个小程序并没有崩溃。但在原始大型项目中,它会出现以下错误:
char *p = (char*)malloc(8192);
for(int i = 0; i < 9200; ++i){
p[i] = '1';
}
char *s = (char*)malloc(strlen(p));
原始项目比较复杂,因此我对其进行了简化。我使用malloc分配了8192字节的空间。然后我的程序会向数组中写入超过8192个字符。接着我会再次使用malloc来分配内存。
这个小程序并没有崩溃。但在原始大型项目中,它会出现以下错误:
这种差异可能是由什么引起的呢?malloc(): memory corruption: 0x0000000007d20bd0 ***
p
现在指向您写入的最后一个“1”后面的字节。这意味着strlen(p)
将无法返回任何有意义的内容。 - Героям славаstrlen()
在任何情况下都会失败(导致未定义的行为)。 - alkmalloc()
及其相关函数时,不需要进行类型转换。 - alk