Posted on 2019-11-05 00:34
魔のkyo 阅读(534)
评论(0) 编辑 收藏 引用 所属分类:
Programming 、
C++
#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.