您的位置:首页 > 运维架构 > Linux

关于为什么malloc开辟的空间,free后再linux下还可以打印出原来的内容

2017-07-01 16:37 204 查看
查看了一些资料和一些大牛们的解答,我的理解是:

在linux下,malloc开辟的空间,free后,只是告诉系统刚才malloc的这块地址空间已经使用完成了,其他的malloc在申请空间时可以再用这块地址空间的开辟了。

但是如果free后没有让释放掉的指向NULL,这个时候这个指针变量有可能还是指向了开辟的那片空间,但是现在那片空间已经不属于这个指针了,这时如果在使用这个指针进行赋值操作,就有可能改变那篇空间的有效数据,从而使输出的结果改变,从而影响正确的结果,这个在编译时也不会报错,如果经验不丰富的程序员,就有可能找不到出错的原因,所以,free后一定要让指针指向NULL。

还有一种最直接的解释是,你租了一个房子,现在属于你的,但是有一天你把房子退给房东了,这是房子不属于你了,房东就可以在租给其他的租客,但是你还有这个房子的要是,你还可以访问这个房子,但是现在房子已经不属于你的了,这是你就是非法访问了(这里再打印输出时,就相当于还能打印出原来的内容,但是这时的内容已经不是你真正的内容了,也有可能输出的是一串乱码),如果现在你还有找到一个住的房子,你就是一个没有房子住的人(野指针或者悬空指针,就有可能对系统造成难以预料的错误,成为恐怖分子)

我也是一名在菜鸟之路上努力飞翔的小小菜鸟,可能理解的不够全面,欢迎大牛的指点,欢迎大家的讨论和拍砖
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: