end*_*ess 0 c malloc free list
我正在阅读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;
}
Run Code Online (Sandbox Code Playgroud)
在while语句中,"current"变量在被释放后如何获得下一个值?我搜索了一些代码段以在Web上释放链接列表,并且他们似乎在while语句中使用了两个指针以避免之前的问题.
但是,如果这是一个错误,我在勘误表中找不到这个.那有什么意见吗?
谢谢!
是的,这显然是一个错误.访问已经free()d的堆内存调用未定义的行为.坏书!
正确的方法是next在调用之前缓冲指针free():
while (head != NULL)
{
struct list_node *next = head->next;
free(head);
head = next;
}
Run Code Online (Sandbox Code Playgroud)
笔记:
current并更新head.| 归档时间: |
|
| 查看次数: |
276 次 |
| 最近记录: |