int p=(int)malloc(sizeof(int));
*p=2;
int *q=p;
printf("%d",*p);
free(p);
printf("%d",*p);
两个值不一样第一个是2,第二个是875986
没错,free只是让运行时将这块内存标记为未分配,下次new的时候可能(不是肯定)分配在这个区域内。但是不会改变指针,在free后需要手工加上p=null
其实也可以理解成理解成房子和门牌号比较容易理解吧,malloc申请了一个int的房子,这个房子有个门牌号,用p记录了下来。
当你把p释放之后,就是把这个int的房子给释放了,这时候,这块内存可能会被别人用了。
但是也可能没被别人用,还在那里,只不过是随时可能被别人用。而p本身的值,还是这个int房子的门牌号,指向它!
你去访问,照样可以访问到,但可能已经不是你要的东西了(可能还没被使用,依然是2,也可能已被使用,是其它值)。
我现在没环境,没测试,有环境的可以多试几次,看看是不是有时候会两次都输出2。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。