直接上代码:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
void Alloc()
{
int *pTestA=new int(10);
}
int main()
{
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
char *p=new char[1024*1024];
Alloc();
//_CrtDumpMemoryLeaks();
return 0;
}
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);函数的作用是,在程序退出前调用_crtdumpmemoryleaks,必须设置_CRTDBG_ALLOC_MEM_DF 和_CRTDBG_LEAK_CHECK_DF两个标志位。
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)new的第一个参数有五种,当前设置的是普通型,还有一种是客户端型,给MFC程序用的,其余还有三种类型这里不关心。
C++内存泄漏检测技巧
本文介绍了一种利用C++预处理器宏定义和标准库函数_CrtSetDbgFlag进行内存泄漏检测的方法。通过重新定义new操作符并设置调试标志位_CRTDBG_ALLOC_MEM_DF和_CRTDBG_LEAK_CHECK_DF,可以在程序退出时检查内存泄漏。
408

被折叠的 条评论
为什么被折叠?



