2011-11-11 88 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。即使在非常可怕的输入下,它也不应该出现段错误。我认为你的程序正在导致段错误:你忽略在你的循环体内设置temp