免费整个列表并设置为NULL

时间:2012-12-19 10:36:25

标签: c list

这是任务。它被赋予一个链表,释放所有内存并设置为NULL

这是我的功能:

void free_list(struct Node *node)
{
    while (node)
    {
        free(node);
        node=node->next;
    }
}

它没有输出错误,只是不做任何事情。还有一件事,如何检查内存是否被释放?

3 个答案:

答案 0 :(得分:0)

提示出现了什么问题,而不是示例代码,因为这是作业......

  1. 释放后,您无法可靠地访问node。在释放之前存储node->next的值。
  2. 您按值传递Node指针。如果你想NULL调用者的指针,请使用指向指针的指针。
  3. 没有可移植的方法来检查内存是否被释放,但是如果要在程序退出时检查没有内存泄漏,则可以调查valgrind之类的工具。

    请注意,您无法检查内存位置的内容,以确保自己已释放内存。调用free只是将内存的所有权传递回系统;它可能会在将来的任何时候重新分配(及其值更新)。

答案 1 :(得分:0)

  1. 在释放当前节点之前,您应该获得下一个节点
  2. 如果要分配到头部,则需要将其地址传递给函数。

答案 2 :(得分:0)

void free_list(struct Node **head)
{
    struct node *nnode, *cnode;
    cnode = *head;

    while (cnode)
    {
        nnode = cnode->next;
        free(cnode);
        cnode = nnode;
    }

    *head = NULL;
}

这样称呼.. ,,

free_list(&head);

修改

  • 释放后,您正在访问同一节点node=node->next;,必须在释放节点之前存储下一个指针。