这个C递归结构是否可以正确地回收分配?



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

struct Linked {
    int data;
    Linked* next;
}

我在一个循环中通过calloc使next指针有足够的内存来存储另一个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 的值。

相关内容

  • 没有找到相关文章

最新更新