CRT檢測記憶體洩漏技巧以及注意問題

2021-05-11 08:56:48 字數 1066 閱讀 8258

用crt檢測記憶體洩漏的技巧:

(1)使用以下巨集來對某cpp檔案的記憶體洩漏進行檢測。

vc2005:

#ifdef _debug

#define new new(_normal_block, __file__, __line__)

#undef this_file

static char this_file = __file__;

#endif

或vc6

#ifdef _debug

#define new debug_new

#undef this_file

static char this_file = __file__;

#endif

(2)使用_crtsetbreakalloc來找到「

c:/program files/microsoft visual studio 8/vc/include/crtdbg.h」

的呼叫者。

用crt檢測記憶體洩漏注意的問題:

(1)注意stl的問題。

stl沒法檢測到是stl哪一檔案出錯,它預設提示檔案是「

c:/program files/microsoft visual studio 8/vc/include/crtdbg.h」。可能問題出在於全域性變數沒有被釋放掉。

(2)一旦出現「

c:/program files/microsoft visual studio 8/vc/include/crtdbg.h」的提示,卻始終沒法找到是哪一檔案引起new的呼叫,此時可以嘗試用其他的工具查詢記憶體洩漏問題,利用其它工具提示的資訊找到始作俑者。

(3)注意標頭檔案裡的new,它會被你的粗心忽略掉。

(4)導致「

c:/program files/microsoft visual studio 8/vc/include/crtdbg.h」的一些第三方程式。

包括:stl。

別人編寫的使用new的庫,申請的記憶體沒有被釋放。

(5)strcore.cpp(141)的錯誤,是cstring記憶體洩漏導致。

可能的原因:getbuffer未releasebuffer。

記憶體洩漏除錯(1) CRT

記憶體洩漏 c run time libraries crt 設定斷點 記憶體洩漏的簡單定義是沒有正確的釋放已經分配的記憶體,這在c c 程式中是乙個很難檢測的bug 一塊較小的記憶體洩漏可能很容易被忽視,但如果記憶體洩漏的現象不斷積累,後果可能導致程式的崩潰,甚至還會影響到其他程式的執行,所以記憶...

利用CRT庫函式檢查記憶體洩漏

利用crt庫函式檢查記憶體洩漏 條件 1.在debug模式下。2.define crtdbg map alloc include stdlib.h include crtdbg.h crtdumpmemoryleaks 可以列印出目前為止沒有釋放的已申請記憶體。necessary define cr...

記憶體洩漏檢測

一 記憶體洩漏 記憶體洩漏是程式設計中常常見到的乙個問題.記憶體洩漏往往會一種奇怪的方式來表現出來,基本上每個程式都表現出不同的方式.但是一般 最後的結果只有兩個,乙個是程式當掉.乙個是系統記憶體不足.還有一種就是比較介於中間的結果程式不會當,但是系統的反映時間明顯降低,需要定時的 reboot才會...