1
ccarrill@ubuntu:~/C$ ./ccarri7lab9
q: quit the program
i: inserts an integer value
d: deletes an integer value
c: checks if an integer value is in the list
e: deletes all integers from the list
l: lists the items in the list (small to big)
r: lists the items in reverse order (big to small)

Please make a choice: i
Enter the value you want to insert: 3
Please make another choice: i
Enter the value you want to insert: 4
Please make another choice: i
Enter the value you want to insert: 5
Please make another choice: l //lists integers
3 4 5 
Please make another choice: e //deletes list
Please make another choice: l //lists integers
137904144 137904160 0     // output
Please make another choice: q

リストの削除機能以外はすべて正常に機能します。何らかの理由で、各ノードを解放する必要があるときにガベージを出力しています (したがって、リンクされたリスト全体を解放します)。各関数は再帰的に実行する必要があります (これは代入です)。

void deleteList(node* head)
{
    if(head)
    {
        deleteList(head->next);
        free(head);
    }
}
4

1 に答える 1

2

リスト全体を削除したら、headポインターをに設定する必要がありますNULL。そうしないと、ぶら下がったままになり、リストを印刷しようとしたときに未定義の動作が発生します。

内部でこれを行うには、関数を変更してダブルポインターとしてdeleteList()受け取る必要があります ( )。headnode**

于 2013-03-19T07:10:52.813 に答える