链表释放动态分配的内存

c87527124 2011-12-25 09:12:49
c primer plus 5th page 489
--------------------------------
current = head;
while (current != NULL)
{
free(current);
current=current->next;
}

----------------------------------
我的理解,第一个数据的指针进去后就被销毁了【 free(current);】,得不到第二个数据的指针了【current=current->next;】无效???
----------------------------------
求高手解释。谢谢。
...全文
111 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
c87527124 2011-12-25
  • 打赏
  • 举报
回复
谢谢各位!
---------------------------
我的:
current = head;
while (current != NULL)
{
prev=current;
free(current);
current=prev->next;
}

也不对,free()到底是怎么回事?怎么释放?什么叫释放?
难道 free() 抹除了该内存的全部内容,要不然,应该还是可以借助之前储存的指针访问想要的数据啊?
尘缘udbwcso 2011-12-25
  • 打赏
  • 举报
回复


linklist p;
p = head;
while(p != NULL)
{
p = p->next;
free(head);
head = p;
}
dedlous 2011-12-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mingliang1212 的回复:]

C/C++ code


while (current != NULL)
{
prev=current;
current=prev->next;
free(prev);

}
[/Quote]以前还真没注意这个问题
iamnobody 2011-12-25
  • 打赏
  • 举报
回复


while (current != NULL)
{
prev=current;
current=prev->next;
free(prev);

}


yafeng_jiang 2011-12-25
  • 打赏
  • 举报
回复
看人品的程序
yafeng_jiang 2011-12-25
  • 打赏
  • 举报
回复

current = head;
while (current != NULL)
{
free(current);
current=current->next;
}


有可能发行运行错误!
c87527124 2011-12-25
  • 打赏
  • 举报
回复
怎么写才是对的?
current = head;
while (current != NULL)
{
prev=current;
free(current);
current=prev->next;
}

这么写也不对。。。
求真相!!!
iamnobody 2011-12-25
  • 打赏
  • 举报
回复
我的理解,第一个数据的指针进去后就被销毁了【 free(current);】,得不到第二个数据的指针了【current=current->next;】无效???


====
你的理解非常正确...书错了..

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧