社区
数据结构与算法
帖子详情
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
打赏
收藏
free后指针是否为空
Tree* root; root = (Tree*)malloc(sizeof(Tree)); printf("%d \n",root); free(root); printf("%d \n",root); 我期望的结果应该是 3674080 0(free后的空指针) 但却是 3674080 3674080 难道free后的指针仍不为空吗? 请大家解释下。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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掉没?
Linux C编程进阶之
指针
与数组解析
数组与
指针
是C语言的难点和重点,如果不懂
指针
和数组,就谈不上会C语言,更谈不上精通,本教程凝结了多年讲授C语言编程的心血,总结出了容易理解、简单使用的
指针
数组分析技巧,通过该技巧分析出数组名、多维数组、多级
指针
的本质含义,通过这个技巧,让菜鸟告别C语法错误,正真成为C语言编程高手,精通C语言。
C语言
Free
空
指针
会怎样?
这是因为
free
函数只对有效的
指针
进行内存释放操作,而对空
指针
调用
free
函数是无效的,因为没有与之相关联的动态分配内存。需要注意的是,在调用
free
函数之后,被释放的内存将不再可用,即使保存了指向这块内存的
指针
,也不应再对其进行访问。因此,使用
free
函数释放内存后,应当避免使用指向这块内存的
指针
。使用
free
函数释放一个空
指针
是一种良好的编程习惯,在某些情况下,可能需要在程序中的某些条件下进行内存释放操作。在释放内存之后对
指针
进行置空操作,可以避免悬空
指针
的问题,即对已释放的内存进行无效访问。
free
之后要记得
指针
置空
别看
free
和delete 的名字恶狠狠的(尤其是delete),它们只是把
指针
所指的内存给释放掉,但并没有把
指针
本身干掉。 用调试器跟踪示例程序,发现
指针
p 被
free
以后其地址仍然不变(非NULL),只是该地址对应的内存是垃圾,p 成了“野
指针
”。如果此时不把p 设置为NULL,会让人误以为p 是个合法的
指针
。 如果程序比较长,我们有时记不住p 所指的内存是否已经被释放,在继续使用p 之前,通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if 语句起不到防错作用,...
free
后
指针
为NULL?
别看
free
和delete 的名字恶狠狠的(尤其是delete),它们只是把
指针
所指的内存给释放掉,但并没有把
指针
本身干掉。 用调试器跟踪示例程序,发现
指针
p 被
free
以后其地址仍然不变(非NULL),只是该地址对应的内存是垃圾,p 成了“野
指针
”。如果此时不把p 设置为NULL,会让人误以为p 是个合法的
指针
。 如果程序比较长,我们有时记不住p 所指的内存是否已经被释
c语言如何查找空
指针
,c语言中的空
指针
#include#include#define SAFE_MALLOC(n) safe_malloc(n)#define SAFE_
FREE
(p)safe_
free
((int**)(&(p)))//将变量
指针
赋值为空
指针
//若变量本身为空,则提示出现野
指针
void safe_
free
(int **p){if(*p){
free
(*p);*p = NULL;printf("这不是野
指针
!!!,...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章