C 記憶體洩漏檢測

2021-08-25 02:35:45 字數 2387 閱讀 1333

今天寫乙個程式突然想檢測一下是否有記憶體洩漏,於是上網查了一下,大多數都是一種方法。只是實現略有不同,記錄如下。

在你想檢測的地方都必須包含

#define _crtdbg_map_alloc  

#include

#include

在程式末尾加上_crtdumpmemoryleaks()

debug除錯後,如果有記憶體洩漏,除錯視窗會輸出記憶體洩漏的塊,如下:

#include "stdafx.h"

#define _crtdbg_map_allooc

#include

#include

int _tmain(int argc, _tchar* argv)

_crtdumpmemoryleaks();

return

0;}

除錯輸出:

會提示乙個塊號和洩漏的大小。**中加大括號的目的是說明指標的作用域,超出作用域還未釋放自然就是洩漏。所以一般全域性變數分配了記憶體,到程式結束時候才釋放,但此函式會一直把新申請的記憶體當作洩漏來對待。所以最好別再全域性分配。

在程式入口寫幾個語句,程式退出時,如果發現有記憶體洩漏,會自動在debug output視窗和debugview中輸出記憶體洩漏資訊。

int tmpflag =_crtsetdbgflag( _crtdbg_report_flag );

tmpflag |= _crtdbg_leak_check_df;

_crtsetdbgflag( tmpflag );

**如下:

#include "stdafx.h"

#define _crtdbg_map_allooc

#include

#include

int _tmain(int argc, _tchar* argv)

//_crtdumpmemoryleaks();

return

0;}

結果是一樣的,就不展示。

使用_crtmemcheckpoint(),可以查出某程式段的記憶體洩漏情況。如下:

#include "stdafx.h"

#define _crtdbg_map_allooc

#include

#include

int _tmain(int argc, _tchar* argv)

_crtmemcheckpoint(&s2);

if (_crtmemdifference(&s3, &s1, &s2)) _crtmemdumpstatistics(&s3);

//_crtdumpmemoryleaks();

return

0;}

除錯輸出:

知道了發生記憶體洩漏的塊號,可以使用_crtsetbreakalloc();函式在塊號處中斷,程式入口中加上_crtsetbreakalloc(塊號),debug後中斷的地方就是分配記憶體未釋放的地方。

通過一系列巨集定義可以直接得到記憶體洩漏的**行數。例項如下:

#include "stdafx.h"

#define _crtdbg_map_alloc

#include

#include

#ifdef _debug

#define new debug_clientblock

#endif // _debug

#ifdef _debug

#define debug_clientblock new( _client_block, __file__, __line__)

#else

#define debug_clientblock

#endif // _debug

int *p = new

int;

int _tmain(int argc, _tchar* argv)

_crtsetdbgflag(_crtdbg_alloc_mem_df | _crtdbg_leak_check_df);

return

0;}

除錯輸出:

5、c++記憶體洩漏檢測的辦法有很多,當然在vs下這可能是比較簡單的了。

C 記憶體洩漏檢測

include stdafx.h ifdef debug define debug new new normal block,file line 重新定義new用於記憶體洩漏檢測時輸出行號 define debug malloc s malloc dbg s,normal block,file li...

記憶體洩漏檢測

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

記憶體洩漏檢測

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