这是任务。给它一个链表,释放所有内存并将 head 设置为NULL
.
这是我的功能:
void free_list(struct Node *node)
{
while (node)
{
free(node);
node=node->next;
}
}
它不会输出任何错误,只是不会做任何事情。还有一件事,如何检查内存是否被释放?
提示出了什么问题而不是示例代码,因为这是家庭作业...
node
释放后无法可靠访问。存储node->next
释放前的值。Node
按值传递指针。如果您想要NULL
调用者的指针,请改用指向指针的指针。没有可移植的方法来检查内存是否已释放,但是如果您想检查程序退出时是否没有内存泄漏,您可以研究valgrind之类的工具。
请注意,您无法检查内存位置的内容以确保内存已被释放。调用free
只是将内存的所有权传回给系统;它可能会在将来的任何时候重新分配(并更新其值)。
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;
,您必须在释放节点之前存储下一个指针。