0

我对 valgrind 和 C 都很陌生,并且无法准确解释我的代码有什么问题。我在第 285 行得到一个无效的读取大小 1,它说在分配 5 个块后地址为 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]);
}

我不会在代码中的其他任何地方释放这些数据,所以我不确定出了什么问题。此外,输出中实际上不止一个二维数组,但我认为没有必要深入探讨,因为这个错误似乎与这种特定情况有关。

4

1 回答 1

2

这个数据结构中的词放在哪里?该%s指令将读取字符,直到遇到\0空终止符。因此,如果该单词比分配的内存块长一个字符,则 printf 行将读取结束后的一个字节。

于 2012-12-13T01:30:30.397 回答