gpt4 book ai didi

c - 删除链表中的所有节点

转载 作者:行者123 更新时间:2023-12-02 08:28:43 28 4
gpt4 key购买 nike

有人知道这个递归函数有什么问题吗?它不会删除所有节点

struct contact
{
char FirstName[41];
char LastName[41];
int id;
struct contact *next;
};

void ClearList (struct contact *person)
{
struct contact *temp = person;
if (person == NULL) return;
else
{
person = person->next;
free(temp);
ClearList(person);
}
}

这是我的主要功能

void main()
{
struct contact *person = malloc(sizeof(struct contact));
strcpy (person->FirstName, "John");
strcpy (person->LastName, "Doe");
person->id = 10;

person->next = malloc(sizeof(struct contact));
strcpy (person->next->FirstName, "Will");
strcpy (person->next->LastName, "Smith");
person->next->id = 20;
person->next->next = NULL;

PrintList(person);
ClearList(person);
PrintList(person);
}

当我在调用 ClearList 后调用 PrintList 时,它仍然打印出一些乱七八糟的东西,我该如何解决这个问题?

最佳答案

所有节点都被删除了,但您永远不会清除任何指针。所以你正在做的是取消引用导致 undefined behavior 的无效指针.

free 函数不会自动将指针设置为 NULL

关于c - 删除链表中的所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29517750/

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