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