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

本文详细介绍了内存泄漏与野指针的概念及其潜在危害,并提供了避免这些问题的有效策略。通过良好的编程习惯和使用智能指针等现代技术手段,可以显著提高程序的稳定性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

什么是内存泄漏?

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

内存泄漏的危害?

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

如何检测内存泄漏?

使用工具 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类型指针赋值给其他指针,容易出现错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值