CRT 调试技术检测内存泄露
在出现new 的文件中包含以下语句,此段代码一般加在所有其他#include 语句之后,以免造成冲突
#include <crtdbg.h>
using namespace std;
// 将所有的内存分配函数new替换成CRT提供的调试new
#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK new(_CLIENT_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_CLIENTBLOCK
#endif
#ifdef _DEBUG
#define new DEBUG_CLIENTBLOCK
#endif
在程序的入口处加入以下代码,当程序退出时 会输出未释放内存申请时的文件名和行号
//用于检测内存泄露
#if defined( _MSC_VER ) && defined( _DEBUG )
int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
// Turn on leak-checking bit.
tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
// Turn off CRT block checking bit.
tmpFlag &= ~_CRTDBG_CHECK_CRT_DF;
tmpFlag|=_CRTDBG_ALLOC_MEM_DF ;
// Set flag to the new value.
_CrtSetDbgFlag( tmpFlag );
_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_DEBUG );
_CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_DEBUG );
_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_DEBUG );
//_CrtSetReportMode( _CRT_ERRCNT, _CRTDBG_MODE_DEBUG );
#endif