利用CRT库函数检查内存泄漏
2011-08-24 20:57
169 查看
条件:
1.在Debug模式下。
2.#define_CRTDBG_MAP_ALLOC
#include"stdlib.h"
#include"crtdbg.h"
_CrtDumpMemoryLeaks()可以打印出目前为止没有释放的已申请内存。
//Necessary
#define_CRTDBG_MAP_ALLOC
#include"stdlib.h"
#include"crtdbg.h"
intmain()
{
int*p=newint(2);
//Reportmemoryleakuntilnow.
_CrtDumpMemoryLeaks();
deletep;
return0;
}
上述代码输出如下:
Detectedmemoryleaks!
Dumpingobjects->
{53}normalblockat0x00394FC0,4byteslong.
Data:<>02000000
Objectdumpcomplete.
其中{53}表示第53次申请的内存没有释放。
_CrtSetBreakAlloc(longn)可以在Debug时让程序自动在第n次申请内存的代码处停止。
//Necessary
#define_CRTDBG_MAP_ALLOC
#include"stdlib.h"
#include"crtdbg.h"
intmain()
{
_CrtSetBreakAlloc(53);
int*p=newint(2);
//Reportmemoryleakuntilnow.
_CrtDumpMemoryLeaks();
deletep;
return0;
}
在Debug上述代码时,可以在程序停止处查看调用堆栈找到引起泄漏的内存分配代码:
当程序有多个退出点时,可以调用Using_CrtSetDbgFlag()让程序在结束时输出内存泄漏信息。
//Necessary
#define_CRTDBG_MAP_ALLOC
#include"stdlib.h"
#include"crtdbg.h"
intmain()
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
int*p=newint(2);
return0;
}
1.在Debug模式下。
2.#define_CRTDBG_MAP_ALLOC
#include"stdlib.h"
#include"crtdbg.h"
_CrtDumpMemoryLeaks()可以打印出目前为止没有释放的已申请内存。
上述代码输出如下:
Detectedmemoryleaks!
Dumpingobjects->
{53}normalblockat0x00394FC0,4byteslong.
Data:<>02000000
Objectdumpcomplete.
其中{53}表示第53次申请的内存没有释放。
_CrtSetBreakAlloc(longn)可以在Debug时让程序自动在第n次申请内存的代码处停止。
在Debug上述代码时,可以在程序停止处查看调用堆栈找到引起泄漏的内存分配代码:
当程序有多个退出点时,可以调用Using_CrtSetDbgFlag()让程序在结束时输出内存泄漏信息。
相关文章推荐
- 利用CRT库函数检查内存泄漏
- 利用 LeakCanary 来检查 Android 内存泄漏
- 利用 LeakCanary 来检查 Android 内存泄漏
- 利用 LeakCanary 来检查 Android 内存泄漏
- 利用 LeakCanary 来检查 Android 内存泄漏
- 利用mtrace检查内存泄漏
- mtrace检查内存泄漏
- 利用JProfiler对应用服务器内存泄漏问题诊断一例(转)
- 利用valgrind 查找内存泄漏
- C程序中检查内存泄漏的方法
- 内存泄漏----检查方法
- 使用DBX检查内存泄漏
- [C++] 内存泄漏检查工具 Valgrind
- 一种通用的终端设备内存泄漏检查方案
- 检查内存泄漏和高危函数的自动化
- Android应用程序如何避免内存泄漏以及如何检查泄漏原因
- vld内存泄漏检查工具不能显示内存泄漏文件名与行号
- (转载)Linux下检查内存泄漏、系统性能的系列工具
- C++简单内存泄漏检查机制实现
- 内存泄漏检查-手工办法