posts - 225, comments - 62, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
#include <iostream>
using namespace std;

#define _CRTDBG_MAP_ALLOC
#include 
<crtdbg.h>

// 按理说通过定义上面的宏再引入头文件,new就会被重新定义成记录文件和行号的
// 但是实际测试下来没有,不知道为什么,而手动定义是起作用的,Microsoft Visual C++ 2019 16.3.2
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)

int main(void)
{
    
/* 还有其他选项,可以跳转到定义处查看
#define _CRTDBG_ALLOC_MEM_DF        0x01  // Turn on debug allocation
#define _CRTDBG_LEAK_CHECK_DF       0x20  // Leak check at program exit
    
*/
    
// 当没有定义_DEBUG宏时,下面的调用会被替换成一个哑的宏,什么都不做
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
    
int* p = new int();
}
程序结束有会在输出栏输出如下信息,可以直接双击就会跳转到产生泄漏的文件和行号
Detected memory leaks!
Dumping objects ->
D:\development\cpp_test\Project1\main.cpp(21) : {82} normal block at 0x00000218B2905FC0, 4 bytes long.
Data : < > 00 00 00 00
Object dump complete.
只有注册用户登录后才能发表评论。