MFC框架下有默认有检测手段
MFC每一个cpp都有以下内容
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
而DEBUG_NEW这个宏定义在afx.h中,就是它帮助我们解决这个问题
这样如果泄露就可以通过输出窗口看见。
纯C++ ,建议看一下MSNN里面Debug Routines内容
其中最重要的一个是在头文件中包含crtdbg.h 然后调用_CrtDumpMemoryLeaks()就可以在输出窗口中打印;但是他是在调用 _crtDumpMenmoryleaks()的时候打印泄露情况,如果我们调用时机不对,就不能够只检测出来或则检测不正确。而我们一般都是在程序退出的时候进行内存泄露检测的;
这儿总结了一个头文件KDetectMemoryLeak.h,其包含了crtdbg.h ,我们在需要检测的时候的文件中包含这个头文件,然后调用接可以了
/* KDetectMemoryLeak.h */
#pragma once
#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK new(_CLIENT_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_CLIENTBLOCK
#endif
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#define new DEBUG_CLIENTBLOCK
#endif
#include <assert.h>
程序在包含这个头文件,且在主程序的里面还要设置:
这样我们就能在程序推出的时候检测内存泄露了
#include"KDetectMemoryLeak.h"
void Exit()
{
int i = _CrtDumpMemoryLeaks(); //如果有泄露就返回1;
assert(i == 0); //这样就会报错终止程序
}
int main(){
atexit(Exit); //这个函数的作用是:设置在程序退出的时候调用Exit();
.....
}