2011-11-11 10 views
0
temp = Head; 
while (Head != NULL) { 
    Head = temp->nextPtr; 
    free(temp); 
} 

私のプロジェクトでは、一時的なリンクリストを使用していますが、リンクされたリストのすべての要素を同時に削除したいのですが、コンパイラはセグメンテーションフォルトを与えます。リンクされたリストのすべての要素を削除する

+1

あなたは同じノードを解放し続けますか?つまり、テンポラリポインタはwhileループ内ではまったく変更されません。 – dip

+0

これはちょうどサンプルコードですが、どれも動作しません – justuser

答えて

5

ループの最初または最後にどこかにtemp=Head;がありません...最初の頭にtempが残ります。

最も簡単な方法は、ループの前からループ内の最初の行にtemp=Head;を移動することです。

while (Head != NULL) { 
    temp = Head; 
    Head = temp->nextPtr; 
    free(temp); 
} 
1

私はあなたのコンパイラがSegmentation Faultを与えているとは思いません。かなり恐ろしいインプットの下でさえ、セグメンテーションしてはいけません。あなたのプログラムがsegfaultを引き起こしていると思います。あなたはループ本体内にtempを設定することを怠っています。

関連する問題