2010-12-28 18 views
1

私はこの私のプログラムがメモリリークチェックでエラーが発生するのはなぜですか?

valgrind --leak-check=yes ./Main 

を使用する場合、私はおよそ185236エラーを持っています。それは言った:Xブロックで

xxのバイトは、おそらくXXXX

の損失レコードXXXXに

を失っているここに私のコードです:

Node InsertString(Head head, Node tree, char* data) { 
    if (tree == NULL) { 
     tree = malloc(sizeof (struct TreeNode)); //Error 

     if (tree == NULL) { 
      printf("Out of Space!\n"); 
     } else { 
      tree->theData = malloc(sizeof (char) * strlen(data));//Error 
      strcpy(tree->theData, data); 
     } 
    } else { 
      if (strcmp(data, tree->theData) < 0) { 
       tree->Left = InsertString(head, tree->Left, data); //Error 
      } else { 
       if (strcmp(data, tree->theData) > 0) { 
        tree->Right = InsertString(head, tree->Right, data);//Error 
       } 
      } 
     } 

    } 
    return tree; 
} 

ありがとうございました!

+1

あなたはどこでデータを自由にしますか? –

+0

データをどこから解放すればいいですか? – Tuan

答えて

4

freeと呼んで、割り当てようとしているメモリの割り当てをmallocに割り振りますか?

もしそうでなければ、あなたはそのすべてのメモリを漏らしています。

+0

こんにちは、お返事ありがとうございます。データを保存するためにメモリ空間をmallocしなければならない理由を私に説明してから解放してもらえますか? – Tuan

+2

@トゥアン:それはあなたが[良い初心者のCの本](http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list)を得るために行動するだろう。私はこの答えに利用できる短い空間で、CメモリモデルとC言語の動的割り当てのベストプラクティスについて十分に説明することはできません。 –

+0

ありがとう! – Tuan

-2

valgrindというツールを使用します。このようなメモリリークが伝えられます。

+4

あなたはその質問を読んだことがありますか?質問の5番目の単語は "valgrind"です。 –

関連する問題