【C/C++学习笔记】指针和内存泄漏

指针和内存泄漏(p=NULLfree(p)

C语言真是既简单又深奥,还挺意思;今天小伙伴又有什么问题呢?!

一、题目

为什么在代码里,一个 node 指针在 malloc 一段内存后,需要首先 memset 一下,并且 free 掉之后,还可以通过 node 指针访问到里面的内容?

二、分析

下面按照关键点来逐条分析:

  1. 为什么要 memset 一下:
    其实程序新申请的内存空间中,并不能保证空间是零值。比如另一个程序刚刚释放了此空间,正好此时系统被分配了此空间,如果直接读取的话,肯定就能读到之前程序写入的数据,这样就有可能对我们的数据造成污染,所以需要 memset 来全部置零,保证自己程序数据的安全。
    不仅是内存,在磁盘上也是,在我们删除电脑文件的时候,一个大文件一下就删除掉了,其实系统并没有删除掉磁盘的数据,只是告诉系统这一段磁盘空间被释放了,别的程序可以往这一段空间写数据了,原来文件数据都还存在磁盘里,文件恢复工具就是利用这个原理来恢复旧文件(在没有别的程序写数据的情况下,轻松就恢复了这个文件)。

  2. 为什么 free 掉之后,还可以通过指针访问到?
    其实这和上面 memset 是同理的,free 指针之后,只是告诉系统该空间可以被别的程序使用,而并没有抹掉此空间里的数据。所以只要在别的程序写入数据之前访问,还是可以读取到原来的数据的。

  3. 在日常开发中该怎么办?
    在日常开发中,当然是养成良好的习惯!
    由于 free 会释放内存,p=NULL 会释放指针的指向地址;所以他们两个要成对出现;首先 free 内存,然后把指针指向 NULL。(如果先指向 NULL 就会造成内存泄漏,切记!)

三、总结

养成良好的编程习惯,搞明白一条语句到底干了什么! 必然会帮你走的更远!


——2020-04-04——

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值