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