内存泄漏快速定位方法
2008-09-13 12:27
274 查看
主要方法:利用系统带的函数:EnableMemLeakCheck() 和 函数重载,能快速准备的定位到内存泄漏的地方,方法简单且实用,值得借用。
#include <crtdbg.h>
#ifdef _DEBUG //重载一下new函数,这样能得到使用new 开辟空间而发生泄漏的文件和所在行,这就是定位
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
void EnableMemLeakCheck() //用于检测是否有内存泄漏。
{
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)|_CRTDBG_LEAK_CHECK_DF);
}
void main()
{
EnableMemLeakCheck();
int *leak = new int[10];
}
运行后得到的消息:
Loaded 'C:\WINNT\System32\ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINNT\system32\kernel32.dll', no matching symbolic information found.
Detected memory leaks!
Dumping objects ->
D:\DS_Learn\meleak\test1.cpp(19) : {39} normal block at 0x00430120, 40 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
The thread 0x91C has exited with code 4391200 (0x430120).
The program 'D:\DS_LEARN\meleak\Debug\meleak.exe' has exited with code 4391200 (0x430120).
很快就能定位到内存泄漏的地方。
我原来也利用相关的方法,在C代码中,重载malloc 和 free,也能很好的检测有没有内存泄漏和发生泄漏的地方,方法都很简单,其实自己在写代码注意一下结构,还是很容易避免发生内存泄漏。
平时喜欢用这样的结构:
projectname_init(); //在初始化时,开辟好空间,对project中一些变量,如结构体开辟空间
projectname_process(); //作相关的处理
projectname_uninit(); //结束程序运行,释放所以动态分配的空间。
#include <crtdbg.h>
#ifdef _DEBUG //重载一下new函数,这样能得到使用new 开辟空间而发生泄漏的文件和所在行,这就是定位
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
void EnableMemLeakCheck() //用于检测是否有内存泄漏。
{
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)|_CRTDBG_LEAK_CHECK_DF);
}
void main()
{
EnableMemLeakCheck();
int *leak = new int[10];
}
运行后得到的消息:
Loaded 'C:\WINNT\System32\ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINNT\system32\kernel32.dll', no matching symbolic information found.
Detected memory leaks!
Dumping objects ->
D:\DS_Learn\meleak\test1.cpp(19) : {39} normal block at 0x00430120, 40 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
The thread 0x91C has exited with code 4391200 (0x430120).
The program 'D:\DS_LEARN\meleak\Debug\meleak.exe' has exited with code 4391200 (0x430120).
很快就能定位到内存泄漏的地方。
我原来也利用相关的方法,在C代码中,重载malloc 和 free,也能很好的检测有没有内存泄漏和发生泄漏的地方,方法都很简单,其实自己在写代码注意一下结构,还是很容易避免发生内存泄漏。
平时喜欢用这样的结构:
projectname_init(); //在初始化时,开辟好空间,对project中一些变量,如结构体开辟空间
projectname_process(); //作相关的处理
projectname_uninit(); //结束程序运行,释放所以动态分配的空间。
相关文章推荐
- VS检测内存泄漏,定位泄漏代码位置方法
- linux下检测和定位内存泄漏位置的方法
- 快速冲内存定位的方法
- VS检测内存泄漏,定位泄漏代码位置方法
- 快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,即USE方法
- C++程序在Windows平台上各种定位内存泄漏的方法,并对比了它们的优缺点
- UNRECOGNIZED SELECTOR SENT TO INSTANCE 问题快速定位的方法
- 简单内存泄漏检测方法 解决 Detected memory leaks! 问题
- 无盘服务器中的磁盘报错快速定位出错的硬盘方法
- 多线程程序退出内存句柄泄漏的问题以及解决方法
- VC下显示内存泄漏的方法
- Android 检测内存泄漏方法总结
- InputMethodManager造成的内存泄漏问题及解决方法
- JAVA --- 内存泄漏方法
- 内存泄漏检查方法
- 快速定位Android闪退问题的方法
- WebView内存泄漏解决方法
- 【Tip来2发】快速定位方法调用者
- 在RELEASE版本中快速定位DATA ABORT的方法
- 手游内存占用过高?如何快速定位手游内存问题