如何检查内存泄漏

如何检查内存泄漏

如何检查内存泄漏

假如程序如下:
[cpp]#include “stdafx.h”
#include “iostream”
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
int *p;
p=new int;
*p = 10;
cout<<*p<<endl;
return 0;
}
[/cpp]

我们不去释放p申请的内存就会照成内存泄漏。

如何检测:在程序中加入如下代码
[cpp]#include “stdafx.h”
#include “iostream”
using namespace std;
//检测内存泄漏
#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

int _tmain(int argc, _TCHAR* argv[])
{
int *p;
p=new int;
*p = 10;
cout<<*p<<endl;
//delete p;
_CrtDumpMemoryLeaks();
return 0;
}[/cpp]

然后调试,窗口会输出Detected memory leaks!内存泄漏信息,并且提示有内存泄露块号{160} normal block at 0x00486768, 4 bytes long.

接下来根据块号查找内存泄漏的位置,加入_CrtSetBreakAlloc(块号);

[cpp]#include “stdafx.h”
#include “iostream”
using namespace std;
//检测内存泄漏
#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

int _tmain(int argc, _TCHAR* argv[])
{
_CrtSetBreakAlloc(160);
int *p;
p=new int;
*p = 10;
cout<<*p<<endl;
//delete p;
_CrtDumpMemoryLeaks();
return 0;
}[/cpp]

最后调试,追踪堆栈位置,即可定位位置p=new int处内存泄漏!