gpt4 book ai didi

c - 销毁链表的正确方法?

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:21 24 4
gpt4 key购买 nike

如何完全销毁我的链表?例如,就在我创建链表并调用打印列表函数时,显然没有任何反应,因为列表中没有任何内容。当我将节点添加到列表时,它会很好地打印出来。但是当我销毁我的列表并尝试打印列表时,我不希望再次打印出任何内容,但我出现了段错误。 *我链表的头也是一个虚拟节点

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("%d\n",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;
}

关于c - 销毁链表的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37473620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com