内存泄漏:即由于疏忽或错误造成程序未能释放已经不再使用的内存,将导致该部分内存无法被使用,造成无谓的内存浪费。

环境

操作系统:win10家庭版
IDE:Visual Studio2019
相关链接:
_CrtDumpMemoryLeaks()
C++内存泄漏及解决办法

检测手段


1.将可能出现内存泄漏的代码单独放到一个函数用作测试,然后while(true)执行该函数,观察IDE内程序的内存使用情况
2.如果内存持续增加,这说明可能存在内存泄漏
3.通过使用_CrtDumpMemoryLeaks()函数检测
_CrtDumpMemoryLeaks()函数:

检测在调用_CrtDumpMemoryLeaks()的函数中是否存在未释放的内存

如果存在内存未释放的内存,则在IDE的"输出"窗口输出未释放内存的地址等信息

(debug_memroy.png

修复手段


代码量较少易于检查
1.仔细检查代码是否new与delete不配对
2.检查代码逻辑是否有错误,导致内存未释放
3.实在是找不到问题用下面的方法

代码量多不易检查
1.通过_CrtDumpMemoryLeaks()函数所输出信息,一步一步缩小出现内存泄漏的代码块
的数据,设置断点,一条语句一条语句看,观察内存是否被释放
2.之后在出现内存泄漏的代码块设置断点,记录变量的内存地址,依次记录并步进,检查_CrtDumpMemoryLeaks()函数的输出信息中内存未释放的内存的地址,对比找出未释放内存的变量

总结


要放好_CrtDumpMemoryLeaks()函数的位置,一步一步缩小内存泄漏的区域,充分利用该函数提供的各种信息,综合判断,找出造成内存泄漏的原因。

Last modification:April 15th, 2020 at 09:13 am