在vc程式設計時,記憶體洩露是個麻煩的事情,特別是有時候會產生比較嚴重的後果,而且這種bug還比較難查.幸好借助一些第三方的軟體,可以方便的找出會產生洩露的地方,比如boundschecker.有時候我們想簡單的了解我們的程式是否存在記憶體洩露,還可以直接使用vc的除錯庫.
設定記憶體洩漏檢測
檢測記憶體洩漏的基本工具是偵錯程式和crt除錯堆函式。為了使用除錯堆函式,在你的程式中你必須含有下面的說明:
#define _crtdbg_map_alloc
#include
#include
#include說明必須按順序說明。如果你改變了順序,你所用的函式可能不能正常工作。包含crtdbg.h的_malloc_dbg和 _free_dbg將 malloc和free函式對映到測試
版中,它可以跟蹤記憶體的分配和釋放。這種對映僅僅在乙個測試
體系中發生(也就是說,僅僅當_debug被定義的時候)。釋放的體系使用通常的malloc和 free功能。
#define說明對映crt堆函式的低階版本到相應的測試版本。這個說明是不需要的,但是沒有它,記憶體洩漏處含有的只是沒有多大用處的資訊。
一旦你已經增加了剛才的說明,你能夠通過在你的程式中包含下面的說明來釋放記憶體資訊:
_crtdumpmemoryleaks();
當你在除錯情況下執行你的程式時,在輸出視窗的debug 標籤處_crtdumpmemoryleaks表現出記憶體洩漏的資訊。記憶體洩漏資訊類似下面這樣:
detected memory leaks!
dumping objects ->
c:program filesvisual studiomyprojectsleaktestleaktest.cpp(20) : normal block at 0x00780e80, 64 bytes long.
data: < > cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd
object dump complete.
VC檢測記憶體洩露
標頭檔案中加入如下 define crtdbg map alloc include include ifdef debug ifndef dbg new define dbg new new normal block file line define new dbg new endif endif ...
記憶體洩露檢測
c 中檢測記憶體洩漏可以引入系統定義的巨集來檢視,內存在哪個位置洩漏 檔案開始處加入下列定義 define crtdbg map alloc include include 程式退出時加入以下函式 crtdumpmemoryleaks 如果有洩漏會顯示 記憶體洩漏是程式設計中常常見到的乙個問題,我所...
檢測記憶體洩露
程式結束時,作業系統會 程式占用的資源.但是,只要程式還在執行,如果不進行清理,資源最終可能被耗盡.1.vc記憶體洩露檢查工具 visual leak detector 現在已知的最新有2.0版本的,使方法不詳。使用 visual leak detector 2.2.3 在vs工程的linker i...