0

这是任务。给它一个链表,释放所有内存并将 head 设置为NULL.

这是我的功能:

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

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

4

3 回答 3

0

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

  1. node释放后无法可靠访问。存储node->next释放前的值。
  2. 您正在Node按值传递指针。如果您想要NULL调用者的指针,请改用指向指针的指针。

没有可移植的方法来检查内存是否已释放,但是如果您想检查程序退出时是否没有内存泄漏,您可以研究valgrind之类的工具。

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

于 2012-12-19T10:39:34.240 回答
0
  1. 您应该在释放当前节点之前获取下一个节点
  2. 如果要分配给头部,则需要将其地址传递给函数。
于 2012-12-19T10:40:00.577 回答
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;,您必须在释放节点之前存储下一个指针。
于 2012-12-19T10:51:47.337 回答