VC檢測內存泄露

頭文件中加入如下代碼

#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次內存分配的時候,編譯器會斷下來.這時候利用堆棧信息查看內存泄露地址
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章