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]);
}

コードの他の場所でこのデータを解放していないため、何が問題なのかわかりません。また、実際には出力内に複数の 2 次元配列がありますが、このエラーはこの特定のケースに根ざしているように見えるため、そこに入る必要はないと思いました。

4

1 に答える 1

2

このデータ構造のどこに単語が入れられますか?ディレクティブは、ヌルターミネータ%sに到達するまで文字を読み取ります。\0したがって、ワードが割り当てられたメモリブロックより1文字長い場合、printf行は末尾から1バイトを超えて読み取ります。

于 2012-12-13T01:30:30.397 に答える