0

このプログラムを GDB で実行すると、target/replace malloc ステートメントを通過した後、[1] 要素には常に不適切な値が与えられます。

たとえば (GDB を使用):

(gdb) p target[0]

$1 = -48 '\320'

(gdb) p target[1]

$2 = 101 'e'

(gdb) p target[2]

$3 = -4 '\374'

(gdb) p target[3]

$4 = -73 '\267'

他の変数の値は次のとおりです: replace[1] = 'd'

なぜこれを行うのですか?また、他に重要な情報を省略した場合はお知らせください。

void replace(char** list, int wordLine, int targetAmount)
{
    char** final;
    char* target;
    char* replace;
    int wCounter, cCounter, i, hashCounter = 0, addLetter = 0;
    int copyWord, countChars, numOfWords, finalWords = 0;

    target = (char*)malloc(targetAmount);   //allocating memory for 
    replace = (char*)malloc(targetAmount);  //these char*'s
    // other stuff here
}
4

2 に答える 2

5

mallocメモリのみを割り当てます。内容を保証するものではありません。メモリの内容を 0 で初期化したい場合は、 を試してくださいcalloc

于 2013-02-11T03:09:27.617 に答える
2

mallocメモリをクリアしないため、割り当てられたブロックにゴミが入ります。を使用callocして、メモリを自動的にクリアするmemsetことも、手動でクリアすることもできます。

于 2013-02-11T03:10:48.880 に答える