1. 程式人生 > >VS 檢視是否有記憶體洩露的方法 定位位置

VS 檢視是否有記憶體洩露的方法 定位位置

加入下列巨集定義:

#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_CLIENTBLOCK
#endif
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#define new DEBUG_CLIENTBLOCK
#endif

然後在main函式中呼叫下面的函式:

 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);

執行後將在輸出窗口出未釋放的指標的位置。去下圖:P和P1沒有釋放。

2017.7.1 補充:

,老是報如下錯誤:

error C2661: “CObject::operator new” : 沒有過載函式接受 4 個引數

後來在連結地址這篇帖子的啟發下,

將 #define new   new(_NORMAL_BLOCK, __FILE__, __LINE__)

改成 #define new   DEBUG_NEW

就可以了