在VC下定位内存泄漏总结
来源:互联网 发布:宝贝标题关键词优化 编辑:程序博客网 时间:2024/05/16 07:32
对于如何快速找到和定位内存泄漏的问题,网上已经有很多相关的内容。在这里也就做一个总结。
1.如何发现内存泄漏。
VC中检测内存泄漏的基本工具是调试器和 CRT 调试堆函数。为了使用调试堆函数,必须在要调试的程序中添加下面的语句:
- #define _CRTDBG_MAP_ALLOC
- #include<stdlib.h>
- #include<crtdbg.h>
必须保证上面声明的顺序,如果改变了顺序,可能不能正常工作。寻找内存泄漏的原理只是改变了内存分配的接口,即在DEBUG版中,使用<crtdbg.h>的_malloc_dbg和_free_dbg取代标准的malloc和free函数。由于它们可以跟踪内存的分配和释放,从而可以检测动态分配的内存是否被释放。但是这只会在DEBUG版本中发生(当#define _DEBUG的时候),而Release版本仍使用标准的malloc和free功能。
#define _CRTDBG_MAP_ALLOC表示使用CRT堆函数的相应的DEBUG版本。这个定义不是必须的,但是没有它,内存泄漏报告中的信息不是很详细。
一旦你已经添加了刚才的声明,你就能够通过在程序return前加入下面的代码来报告内存泄漏信息:
- _CrtDumpMemoryLeaks();
例如:
- #define _CRTDBG_MAP_ALLOC
- #include<stdlib.h>
- #include<crtdbg.h> //依次加上以上语句
- #include <iostream>
- using namespace std;
- int main()
- {
- char* a = new char[2];
- a[0] = 'A';
- a[1] = 'B';
- //delete[] a; //故意不delete
- _CrtDumpMemoryLeaks(); //检测并报告内存泄漏
- return 0;
- }
当在DEBUG模式下运行程序时,在Output窗口的Debug页会显示如下内存泄漏的信息:
Detected memory leaks!
Dumping objects ->
{64} normal block at 0x00396A58, 2 bytes long.
Data: <AB> 41 42
Object dump complete.
Dumping objects ->
{64} normal block at 0x00396A58, 2 bytes long.
Data: <AB> 41 42
Object dump complete.
- 在VC下定位内存泄漏总结
- Linux下定位内存泄漏
- Linux下定位内存泄漏-查看内存空间
- Linux下定位命令总结
- VC/MFC 内存泄漏的个人总结
- 在VC中检测内存泄漏
- vc++内存泄漏检测
- VC++内存泄漏定位
- vc 内存泄漏检查
- vc++内存泄漏检测
- VC++内存泄漏定位
- VC++内存泄漏定位
- vc++内存泄漏检测
- VC++内存泄漏定位
- VC 内存泄漏
- vc内存泄漏调试
- VC 查看内存泄漏
- VC++内存泄漏定位
- METHOD? or INTERFACE?
- 多多关照!
- 对每一个匹配的部分替换不同的字符(主要分享思想)
- 当你看到机会时你就看不到困难
- 小型SQL解释器完成~
- 在VC下定位内存泄漏总结
- sns的未来
- 网易有道难题竟然进入复试了
- 自己写的DCT压缩彩色图片的Matlab程序
- 搞笑
- 快乐并不是拥有的多,而是计较的少
- 欺骗他人就是欺骗自己
- 如何选择你要读的书
- 那些年少轻狂的梦