当我们进行c++编程的时候经常遇到的一个问题是内存泄露,尤其在进行一个大型的项目的时候,可能会用到几十个类,稍加不小心造成内存泄露,一般常用以下两种方法:
方法一:
- #ifdef _DEBUG
- #define New new(_NORMAL_BLOCK, __FILE__, __LINE__)
- #endif
- #define CRTDBG_MAP_ALLOC
- #include <stdlib.h>
- #include <crtdbg.h>
- //在入口函数中包含 _CrtDumpMemoryLeaks();
- //即可检测到内存泄露
- //以如下测试函数为例:
- int main()
- {
- char* pChars = New char[10];
- _CrtDumpMemoryLeaks();
- return 0;
- }
注意:
1.在VS2010下测试的时候,发现_CrtDumpMemoryLeaks();这句必须放在函数结束处,放在主函数入口处输出窗口不会输出内存泄露信息
2.有时候我们为了看到程序的调试信息,喜欢加system(“pause”);如果要对内存泄露检测,请不要加这条语句,这样没法检测到我们内存泄露。
方法二:
下载Visual C++的免费的内存泄露检测工具Visual LeakDetector(VLD),下载链接:http://vld.codeplex.com/,它的特点有:(1)、它是免费开源的,采用LGPL协议;(2)、它可以得到内存泄露点的调用堆栈,可以获取到所在文件及行号;(3)、它可以得到泄露内存的完整数据;(4)、它可以设置内存泄露报告的级别。然后配置项目属性,将VLD安装包下的include目录,lib目录,src,分别引入到VC++目录
最后在main函数的头文件中加入#include“vld.h”这样可以检测内存是否泄露。