我对 valgrind 和 C 都很陌生,并且无法准确解释我的代码出了什么问题。我在第 285 行得到无效的读取大小 1,它表示在分配 5 个 block 后地址为 0 字节。我的分配如下:
output = malloc(sizeof(char**));
output[0] = malloc(sizeof(char*)*size);
for(i = 0; i < size; i++){
output[0][i] = malloc(wordLength);
}
无效的读取大小和周围的行是:
for(j = 0; j < size; j++){
printf("%s, ", output[0][j]);
free(output[0][j]);
}
我没有在代码中的其他任何地方释放这些数据,所以我不确定出了什么问题。另外,输出中实际上不止一个二维数组,但我认为没有必要深入探讨这一点,因为此错误似乎源于这一特定情况。
最佳答案
单词被放入这个数据结构的哪里? %s
指令将读取字符,直到遇到 \0
空终止符。因此,如果该单词比分配的内存块长一个字符,则 printf 行将读取超出末尾的一个字节。
关于c - Valgrind 在二维数组中读取 1 的大小无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13851463/