0

リンクリストをトラバースしているときに、セグメンテーション違反が発生します。なぜそうなっているのか理解できません。私の割り当ては、再帰的に(すべての関数)整数を順番に挿入し、整数をチェックする関数を作成し、リストを印刷し、リストを逆方向に印刷し、ノードを削除し、リスト全体を削除することです。私は最後の部分にいて、しばらくの間立ち往生しています。どうもありがとう。

void deleteList(node* head)
{
    node* temp;

    if(head == NULL)
        printf("List is empty\n");

    else
    {
        temp = head->next;
        free(head);
    }

    deleteList(head->next);
}
4

4 に答える 4

4

最初に head で使用されているメモリを解放し、次に head のメンバーを引数として「deleteList」に渡します。

最初にdeleteListにしてから解放する必要があると思います:

if (head)
{
    deleteList(head->next);
    free(head);
}
于 2013-03-19T05:20:57.013 に答える
2

自問してみてください...なぜ変数を格納しているのですかtemp。何かに使ったことはないようです。

あなたはそれを使うつもりだったと思います、そしてあなたはおそらくそれを使うべきです。

于 2013-03-19T05:24:18.320 に答える
1

あなたはすでに頭を解放しているので、あなたがやっているとき

deleteList(head->next);

無効なメモリにアクセスしている場合は、temp 変数を使用してください。

deleteList(temp);
于 2013-03-19T05:25:42.460 に答える
0

そのはず

    temp=head;
    head=head->next;
    free(temp);
    deleteList(head);
于 2013-03-19T05:28:34.167 に答える