我正在阅读C Primer Plus的第17章,这是在书中释放链表的代码段:
/* Program done, so free allocated memory */
current = head;
while (current != NULL)
{
free(current);
current = current->next;
}
printf("Bye!\n");
return 0;
}
在while语句中,“current”变量在被释放后如何获得下一个值?我在网上搜索了一些代码段以释放链接列表,并且他们似乎在while语句中使用了两个指针以避免之前的问题。
但是,如果这是一个错误,我在勘误表中找不到这个。那么有什么意见吗?
谢谢!
答案 0 :(得分:5)
是的,这显然是一个错误。访问已经free()
的堆内存会调用未定义的行为。坏书!
正确的方法是在调用next
之前缓冲free()
指针:
while (head != NULL)
{
struct list_node *next = head->next;
free(head);
head = next;
}
注意:
current
并更新head
。