首页 新闻 会员 周边 捐助

C语言释放内存

0
悬赏园豆:20 [已解决问题] 解决于 2015-04-29 09:24

 

为什么两次top->d的值不一样了,第二次输出top->d的一串东西是什么?

free(top);这条语句实际上是在做什么,释放内存后top还会指向另一块未知的内存吗?

SharpeyeKardel的主页 SharpeyeKardel | 初学一级 | 园豆:30
提问于:2015-04-29 01:08
< >
分享
最佳答案
1

理论上,第二次的输出应该是一样的或者为0。

导致这个问题的原因,你要知道free的作用。

所谓内存分配,类似圈地,撒一泡尿后说这块地就是我的了,也就是标记。

所谓的内存释放,就是放弃,告诉大家,这个东西我现在不用了,大家可以随便使用了,就像公交的座位,你坐了是你的位置,你走了,座位就可以被别人坐了。

 

这里:座位可以被别人坐了,很关键。

当你把内存释放内存后,系统(内存管理系统)标记这块内存是可用的,此时,别的应用就可能使用这块内存。

如果释放后的内存没被使用,可能两种情况,值不变或为0,这个跟free的实现机制有关,具体难确定。但如果这块内存被别的应用使用后,其内容就被改变了,于是就有了你的结果。

你可以反复运行,第二次的输出可能是10或0,也可能是别的不确定的值。

释放内存后,原来的指针top(也就是地址变量)的内容是不会改变的,还是指向malloc分配的地址空间。你可以尝试输出地址看看。

收获园豆:20
519740105 | 大侠五级 |园豆:5810 | 2015-04-29 09:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册