如何完全销毁我的链表?例如,当我创建链表并调用打印列表函数时,由于列表中没有任何内容,因此显然没有任何反应。当我将节点添加到列表中时,它会很好地打印出来。但是当我销毁我的列表并尝试打印列表时,我希望不会再次打印出来,但我有错误。*我的链表的头部也是一个虚拟节点
void destroyList(listNode *List)
{
listNode *temp = malloc(sizeof(listNode));
temp = List->next;
while (List != NULL)
{
temp = List;
List = List->next;
free(temp);
}
}
void printList(listNode * List)
{
List = List->next;
while (List != NULL)
{
printf("%dn",List->val);
List = List->next;
}
}
你之所以出现分段错误,是因为你仍然试图爬下你无法做到的free
指针链。只需将第一个->next
设置为 NULL
,您就可以开始了。
void destroyList(listNode *List)
{
listNode *temp; // removed malloc, it's not necessary.
listNode *originalHead = List;
temp = List->next;
while (List != NULL)
{
temp = List;
List = List->next;
free(temp);
}
originalHead->next = NULL;
}
调用 destroyList 后,您需要将 List 指针设置为 NULL。 因为它是传递 be 值,所以您必须将列表指针的地址传递到 destroyList 中。所以,我会这样做:
void destroyList(listNode **List) {
listNode *temp1, *temp2;
if (!List) {
return;
}
temp1 = *List;
while (temp1) {
temp2 = temp1->next;
free(temp1);
temp1 = temp2
}
free(*List);
}
然后你这样称呼它:
listNode *foo;
// some code
destroyList(&foo);