开发者社区> 问答> 正文

C++ 指针和free()的关系,看书说free()以后指针指向的内存的值还是原来的值

int p=(int)malloc(sizeof(int));

*p=2;

int *q=p;

printf("%d",*p);

free(p);

printf("%d",*p);
两个值不一样第一个是2,第二个是875986

展开
收起
a123456678 2016-03-05 16:41:29 2795 0
1 条回答
写回答
取消 提交回答
  • 没错,free只是让运行时将这块内存标记为未分配,下次new的时候可能(不是肯定)分配在这个区域内。但是不会改变指针,在free后需要手工加上p=null
    其实也可以理解成理解成房子和门牌号比较容易理解吧,malloc申请了一个int的房子,这个房子有个门牌号,用p记录了下来。
    当你把p释放之后,就是把这个int的房子给释放了,这时候,这块内存可能会被别人用了。
    但是也可能没被别人用,还在那里,只不过是随时可能被别人用。而p本身的值,还是这个int房子的门牌号,指向它!
    你去访问,照样可以访问到,但可能已经不是你要的东西了(可能还没被使用,依然是2,也可能已被使用,是其它值)。
    我现在没环境,没测试,有环境的可以多试几次,看看是不是有时候会两次都输出2。

    2019-07-17 18:53:46
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载