gpt4 book ai didi

c - 这个 C 递归结构会正确解除分配吗?

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

假设我有一个标准链表结构如下:

struct Linked {
int data;
Linked* next;
}

我通过 callocing the next pointer 足够的内存来存储另一个 Linked 并初始化它,使它们在一个循环中。按照链表的规范,我只维护一个指向第一个节点的指针,如下所示:

struct Linked *first = make_list();

现在,我想释放整个列表占用的内存。我可以打电话吗

free(first);

并让它释放所有内存(包括分配给所有 next 指针的内存),还是我必须从末尾向后进行释放?

最佳答案

每次调用 calloc() 都必须调用一次 free()。因此,您需要使用循环依次释放列表中的每个元素。您可以选择向后或向前释放,但您可能会发现向前释放更容易:

void freelist(struct Linked *head)
{
while (head != NULL) {
struct Linked *tmp = head;
head = head->next;
free(tmp);
}
}

请注意(这很重要)您必须读取 head->next 的值 before 释放节点。

关于c - 这个 C 递归结构会正确解除分配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24748244/

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