如何用 VS2017 檢測 c++ 內存泄漏

https://msdn.microsoft.com/zh-cn/library/x98tx3cf.aspx

要獲得內存泄漏的報錯信息,只需要三步,咱們不懂原理,只能複製代碼。

1, 開始必須要有這樣的引用

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

2, c++ 一般用 new/delete,根據文章應該有:

    #ifdef _DEBUG
    #ifndef DBG_NEW
    #define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
    #define new DBG_NEW
    #endif 
    #endif  // _DEBUG

3, 在程序結束點加入:

_CrtDumpMemoryLeaks();

這樣就會輸出new而沒delete的object的信息,並且會有編號。
例如

Dumping objects ->
{205} normal block at 0x01362090, 8 bytes long.
 Data: < 76     > AC 37 36 01 00 00 00 00 

我們用

_CrtSetBreakAlloc(205);

就可以在它分配時觸發一箇中斷,當然我們要保證兩次運行內存分配是一致的。
手動管理內存,非常硬核。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章