2010年5月1日 星期六

處理 Memory leak in Visual Studio 2008 C++

Memory leak—the failure to properly deallocate memory that was previously allocated.

C++強大之處的其中一個特性,就是對於記憶體的動態操作非常方便,然而他的優點若處理不好也可能造成很大的問題。所謂Memory leak 簡單說就是程式中使用的物件用完之後沒清乾淨,通常狀況是把指標給清掉了,原本指標指向的物件卻依然占用記憶體的狀況。

範例使用VS 2008內建的 memory leak detection function

#define _CRTDBG_MAP_ALLOC
#include < stdlib.h >
#include < crtdbg.h >

#ifdef _DEBUG

#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)

#define new DEBUG_NEW

#endif

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); //call at the beginning of your program

參考資料:
  1. RuntimeChecker (Suitable for VS 2005, 2008)
  2. Visual Studio 2005 Debugger  Memory Leak Detection and Isolation  
  3. Visual Studio 2008 Debugger  Memory Leak Detection and Isolation 
  4. 局長推薦 Microsoft Application Verifier
  5. 拉拉推薦 Visual Leak Detector

沒有留言: