看过很多windows下关于CrtDumpMemoryLeaks的文章,很多照着做,还是定位不到具体哪一行泄露的,这里总结一下,方便大家排查。
1、宏替换
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
在头文件上,加上一下代码,替换掉默认malloc和new ,替换成功后源代码中的malloc和new 会替换成粉红色(表示宏),说明替换成功。
2、在适当的位置调用CrtDumpMemoryLeaks
一般是退出的时候,但是也可以隔一段时间调用一次,对比查出泄露点。
_CrtDumpMemoryLeaks();
3、查看输出结果,分析可能的泄露原因
注:有些信息依旧没有办法显示出行号的,很可能是某些系统api分配了内存,另外CrtDumpMemoryLeaks有局限性,不能检查出句柄泄露等问题