-1

最初に、リンクされたリスト内のすべての要素を削除しようとしています。次のコードを使用しました。./a.out には問題なく準拠しているように見えますが、valgrind ./a.out を使用すると、メモリ エラーがあると表示されます。問題を解決するのを手伝ってくれませんか? ありがとうございました!

  void List::emptyTheList()

if (head==NULL)
{
    cout<<"there is no elements in the list" <<endl;

}

else
{
DR *temp1;//DR is a class
temp1=head->getNext();
while(temp1!=NULL)
{
    free(head);
    head=temp1;
    temp1=head->getNext();
}

}
4

4 に答える 4

0

問題を解決するには、ノードが 1 つしかない場合を考えてみてください。ループに入ることがないため、解放されることはありません。

コードが静的にテストされている場合 (または自分でレビューした場合は、Valgrind の前に問題が発生する可能性があります)。

一般に、最後のノードが解放されることはありません。

これが問題の原因です。

于 2013-04-29T03:45:35.240 に答える
0

あなたのコードは、削除部分に問題があるようです。これを試してみませんか:

temp1=head;
while(temp1!=NULL)
{
    head=temp1;
    temp1=temp1->next;
    free(head);
}
于 2013-04-29T02:40:22.637 に答える
0

私のコメントによると、次の行を追加するだけで問題を解決できます。

free(head);

「while」ループの終了後。このコードを再構築するためのより良い方法もあります。

于 2013-04-29T02:43:12.263 に答える