内存泄漏&悬挂指针(野指针)的危害及避免

内存泄漏&悬挂指针(野指针)的危害及避免

什么是内存泄漏?

内存泄漏:动态申请的内存空间没有正常释放,但是也不能正确使用的情况。

内存泄漏的危害?

一般用户感觉不到内存泄漏的危害,真正有危害的是内存泄漏的堆积,最终会耗尽系统所有的内存。
如果程序内存泄漏正好写到了系统使用的内存或其他程序使用的内存地址,那么会导致系统异常或程序崩溃。

如何检测内存泄漏?

使用工具 valgrand 检测

如何避免内存泄漏

1良好的编程习惯,自己申请的空间自己释放
2智能指针(RAII)可以自动释放分配的内存

智能指针:auto_ptr/unique_ptr/shared_ptr/weak_ptr
例如:shared_ptr。
使用引用计数,每一个shared_ptr的拷贝都指向相同的内存。在最后一个shared_ptr析构的时候,内存才会被释放。(注意:要避免循环引用)

什么是野指针?

野指针(等于悬挂指针):指向被释放或者访问受限内存的指针

造成野指针的原因?

1、指针变量没有被初始化(如果值不定,可以初始化为NULL)
2、指针被free/delete后没有置空(free/delete只是把指针所指向的内存释放掉,并没有把指针本身干掉,此时指针指向的是”垃圾“内存,释放后指针应置NULL)

野指针的危害?
野指针造成的危害程度和危害时间未知,因为野指针指向的内存空间,有可能是某个重要的数据或其他程序。严重的情况下会造成程序崩溃。

如何避免野指针的产生

1、创建指针时将指针指向合法位置或置空
2、指针释放后置空

void* (空指针/万能指针)

可以保存任何类型的指针值,但是不可以对这个指针取值
一定是相同类型的指针之间才能赋值,因为不同的类型步长不同
不要轻易把float类型指针赋值给其他指针,容易出现错误。

猜你喜欢

转载自blog.csdn.net/yu876876/article/details/81865293