頭文件中加入如下代碼
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#define new DBG_NEW
#endif
#endif
main函數中加入如下代碼
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
則在退出程序時如果有內存泄露,則編譯器在輸出窗口中會顯示泄露信息
如果要定位到內存泄露分配的編號上,可以設置如下
使用“監視”窗口設置內存分配斷點
在應用程序的起點附近設置斷點,然後啓動應用程序。
當應用程序在斷點處中斷時,會出現“監視”窗口。
在“監視”窗口中,在“名稱”列中鍵入 _crtBreakAlloc。
如果要使用 CRT 庫的多線程 DLL 版本(/MD 選項),請加入上下文運算符:{,,msvcr100d.dll}_crtBreakAlloc
按“Return”。
調試器將計算調用,並將結果放入“值”列。 如果沒有在內存分配上設置任何斷點,該值將爲 –1。
在“值”列中,將顯示的值替換爲要在其位置中斷的內存分配的分配編號。
或者在程序中使用如下代碼
_CrtSetBreakAlloc(18);
則程序進行第18次內存分配的時候,編譯器會斷下來.這時候利用堆棧信息查看內存泄露地址