在Visual Studio中,通过定义自定义的new
和delete
操作符来检查内存泄漏并输出到输出窗口(通常是“输出”面板)并不是直接支持的,因为new
操作符的调试版本(如使用_NORMAL_BLOCK
, __FILE__
, __LINE__
)是由Microsoft的调试运行时库(CRT)处理的,并且它本身不直接将信息输出到Visual Studio的输出窗口。
1、重定义new操作符,写在一个头文件中(memchecker.h):
#if defined(WIN32) && defined(_MSC_VER) && defined(_DEBUG)
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define DEBUG_NEW new( _NORMAL_BLOCK, __FILE__, __LINE__ )
#define new DEBUG_NEW
#endif
2、使用_CrtDumpMemoryLeaks函数:
在程序结束前,你可以调用_CrtDumpMemoryLeaks
函数来报告内存泄漏。这通常是在main
函数的末尾或你的应用程序的关闭逻辑中完成的。此函数会输出到调试输出窗口。
#include "memchecker.h"int main() { // ... 你的代码 ... // 在程序结束前检查内存泄漏 _CrtDumpMemoryLeaks(); return 0;
}