1. 包含頭文件和定義:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
如果定義了_CRTDBG_MAP_ALLOC,打印出來的是文件名和行數(shù)等更加直觀的信息。
2. 方法一
在程序入口寫幾個(gè)語句:
int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
_CrtSetDbgFlag( tmpFlag );
程序退出時(shí),如果發(fā)現(xiàn)有內(nèi)存泄漏,會(huì)自動(dòng)在DEBUG OUTPUT窗口和DebugView中輸出內(nèi)存泄漏信息。
3. 方法二
在程序任何地方用以下語句:
_CrtDumpMemoryLeaks();
隨時(shí)檢測(cè)打印內(nèi)存泄漏信息,如果有的話。不過此用法有個(gè)局限,對(duì)于一些全局函數(shù),如果初始化時(shí)申請(qǐng)了內(nèi)存,到程序結(jié)束時(shí)候才釋放,此函數(shù)會(huì)一直把新申請(qǐng)的內(nèi)存當(dāng)作泄漏來對(duì)待。
4. 方法三
使用_CrtMemCheckpoint方法,在某段程序中統(tǒng)計(jì)泄漏信息。如下:
_CrtMemState s1, s2, s3;
_CrtMemCheckpoint( &s1 );
// 程序段1:DO SOMETHING
_CrtMemCheckpoint( &s2 );
if ( _CrtMemDifference( &s3, &s1, &s2) )
_CrtMemDumpStatistics( &s3 );
可以統(tǒng)計(jì)程序段1中是否發(fā)生了內(nèi)存泄漏。