一、在DeBug模式下在代码中添加如下代码:
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
void EnableMemLeakCheck()
{
int tmpFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
_CrtSetDbgFlag(tmpFlag);
}
using namespace std;
int main()
{
EnableMemLeakCheck();
//_CrtSetBreakAlloc(3558059);
此处添加自己的代码
}
二、然后编译执行程序,如果代码中存在内存泄漏,则在程序终止时,输出端口看到如下内容:
线程 0x1b24 已退出,返回值为 0 (0x0)。
Detected memory leaks!
Dumping objects ->
{3558059} normal block at 0x0000000007F11480, 62544 bytes long.
Data: < y W] > CC AD FF AD AA 1B A2 BE 79 9E 57 5D E2 8E FE BE
{3558049} normal block at 0x0000000007CB98F0, 88 bytes long.
Data: < > 0C 00 00 00 CD CD CD CD CD CD CD CD CD CD CD CD
{3558025} normal block at 0x0000000007EF1A90, 62544 bytes long.
Data: < FR > .u ?> E2 CB 46 52 DD 11 E1 3E CB C9 93 2E 75 BE 00 3F
{3558015} normal block at 0x0000000007CBA170, 88 bytes long.
Data: < > 0C 00 00 00 CD CD CD CD CD CD CD CD CD CD CD CD
从以上log中可以看到3558059的地方存在内存泄漏,那我们可以把main()函数中的这个函数去掉注释,
int main()
{
EnableMemLeakCheck();
_CrtSetBreakAlloc(3558059);
此处添加自己的代码
}
然后重新编译并执行程序,代码就会run到内存泄漏的地方就停下来。
此法对于查找内存泄漏非常方便。