如何用 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);

就可以在它分配时触发一个中断,当然我们要保证两次运行内存分配是一致的。
手动管理内存,非常硬核。

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