free后指针是否为空

aioros9520 2009-08-10 04:08:12
Tree* root;
root = (Tree*)malloc(sizeof(Tree));

printf("%d \n",root);
free(root);
printf("%d \n",root);

我期望的结果应该是
3674080
0(free后的空指针)

但却是
3674080
3674080

难道free后的指针仍不为空吗?

请大家解释下。
...全文
676 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
aggio 2009-11-18
  • 打赏
  • 举报
回复
一个不错的例子。有人讲是形参不能改变实参
zhongjiekangping 2009-08-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhshto886 的回复:]
free只是告诉操作系统,指针P所指向的这块内存我不实用了!由操作系统负责收回。而指针P他的空间中存储的还是原来的空间的地址。
当然在free之后再解引用指针就回发生段错误,所以每次free之后,最好p=NULL;
[/Quote]

agreet
hhygcy 2009-08-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 aioros9520 的回复:]
我就不清楚这样到底把动态申请的内存给free掉没?
[/Quote]
换一种思路, 如果free只是一个普通函数, 传入的参数是你之前的Tree*;
你想运行之后Tree*可能等于null吗?
不可能啊 ,如果要改变root的值,那必须是Tree**,或者Tree*&才可以。所以首先就不可能运行free(root);之后root=null;
再者前面的朋友都说了,Free和C++ New一样, 只是告诉系统这块内存我不要了, 系统也只是标记一下,这块内存以后可用,一定要等到下次使用的时候才会对内容进行修改
robbled 2009-08-10
  • 打赏
  • 举报
回复
不错,学习了……
oyzdz1988 2009-08-10
  • 打赏
  • 举报
回复
嗯,而且对同一块内存只能free一次,再次free会出错。。。
Corn1 2009-08-10
  • 打赏
  • 举报
回复
free只是告诉操作系统,这个指针我没用了,可以收回了。但至于什么时候收回,是操作系统的事。
NewJerryj 2009-08-10
  • 打赏
  • 举报
回复
你只是free了指针指向的内存区域,没有真正free指针
为了避免“野指针”,每次free之后,最好是把指针给NULL
zhshto886 2009-08-10
  • 打赏
  • 举报
回复
free只是告诉操作系统,指针P所指向的这块内存我不实用了!由操作系统负责收回。而指针P他的空间中存储的还是原来的空间的地址。
当然在free之后再解引用指针就回发生段错误,所以每次free之后,最好p=NULL;
aioros9520 2009-08-10
  • 打赏
  • 举报
回复
我就不清楚这样到底把动态申请的内存给free掉没?

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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