VisualC++ debugger 和 CRT 库 VC++2010版的IDE操作如下
第一步: 包含以下头文件
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
第二步: 接管 new 操作符
#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new ( _NORMAL_BLOCK , FILE ,LINE)
#define new DBG_NEW
#endif
#endif
第三步: 在代码结束出输出内存泄漏信息
_CrtDumpMemoryLeaks();
内存泄漏工具:
Windows : Purify,BoundsCheaker、Deleaker、VisualLeak Detector(VLD),
Linux 平台:Valgrind memcheck
具体操作代码如下:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include <stdlib.h>
#include <iostream>
#include <Windows.h>
using namespace std;
#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ ,__LINE__)
#define new DBG_NEW
#endif
#endif
void A_live() {
int * p = new int[1024];
//一直使用
p[0] = 0;
//申请的内存必须要“还”
//delete[] p; //添加后解决内存泄漏问题
}
void B_live() {
int * p = new int[1024];
//正常的使用
p[0] = 0;
delete[] p; //还内存
}
int main(void) {
for (int i = 0; i < 5; i++) {
A_live();
Sleep(50);
}
_CrtDumpMemoryLeaks();
system("pause");
return 0;
}
内存泄漏检测工具显示效果:
Detected memory leaks! 意思是:检测内存泄漏!
内存泄漏已解决状态: