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