C++内存泄漏的处理

本文分享了一次解决C++程序内存泄漏的经历,介绍了如何定位内存泄漏源头、理解代码逻辑及标记内存分配与释放的方法。

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

出差了一个月,回来看看发现自己的blog已经好久没有更新了,想想还真是荒废呀。

这个月中,唯一值得写写的就是帮主管解决了一个内存泄漏的小问题。

C++中本身就有检查内存泄漏的机制,就是CMemoryState类,网上以CMemoryState为关键字,肯定能找到不少关于检查内存泄漏和内存调试的文章,我自信肯定没有那些作者写的更好,就不多说了。

好,那现在假设已经发现确实有内存泄漏,那究竟怎么样才能把内存泄漏解决掉呢。我就我自己解决内存泄漏的心得来谈谈。

首先,得把内存泄漏的范围确定在最底层的抽象。简单来说,就是找到直接分配内存的代码段。说起来简单,有些程序的嵌套层次有好几层,一层层的剥开相当花时间;甚至有的时候还有可能是库文件出了问题,还需要去检查库文件的源代码,相当的累。

其次,反复揣摩代码,理解其意图和业务逻辑。其实如果你业务逻辑也不是很清楚的话,是不太会让你去检查内存泄漏这种技术活的。而有些底层的函数,其代码意图也不太好揣测。简言之,如果没有文档,这种活比较花时间。但我认为这种时间是花的值得的,如果你连代码要做什么也不清楚,谈什么修改呢。

然后,标记每处内存分配和释放。MFC有个辅助宏#define new DEBUG_NEW可以标记出每个new分配的内存,但前提是程序能够自然的结束。而像我这次正好是无法自然结束的程序,这种办法用不上。那就有种比较傻瓜的办法,就是在每行new的下行写段打印的代码,把new的分配的打印出来,然后在delete的地方再打印一遍,而且一定要有个计数器之类的,让每个new和delete对应起来。这样,内存的泄漏应该是一目了然了。

最后,熟悉代码意图的你,难道还修改不来吗?

这次我检查内存泄漏,找到内存泄漏的地方花了10多天,而实际真正的修改只花了2天,如果文档能够再全面一点,那10多天可能就不必花了。

PS:现在托管C++编成流行起来了,内存泄漏问题可能以后也不复存在了,对于维护程序的程序员们来说,这真是一个福音。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值