如果编写的c++程序出现内存泄露了,不要慌忙,你要相信任何错误都是人为造成的,只要是人为的,你一定能找到错误所在,只不过是时间的问题而已。在面对内存泄露,如果程序不是特别长的话,你可以使用人工校验,着重查看new和delete的匹配调用。
如果经过一番折腾还未确定程序的错误所在,首先应该明白程序在不停地循环调用的是那部分程序,然后对这部分程序做特殊的处理,逐行验证,然后确定错误所在。
如果还是找不到,那么我们只能借助工具,进行错误泄露的定位了。
首先,介绍的是VLD(Visual Leak Detector),这是一个免费的、开源的、强大的内存泄露检测系统,可以安装当作VS的一个插件。
http://vld.codeplex.com/
在安装完成后,在工程中指定其include header和library file的路径,然后添加头文件
#include <vld.h>
这样就可以使用了。
如例子:
- #include "stdafx.h"
- #include <iostream>
- #include <vld.h>
- #include <string>
- #include <windows.h>
- using namespace std;
- int main()
- {
- while (true)
- {
- char *test = new char[100];
- Sleep(1000);
- }
- cin.get();
- return 0;
- }
双击1位置的错误列表,即可定位到错误的所在
修改vld.h :ReportFile和ReportTo可以将日志打印到目标文件内。
如果你的程序还存在内存泄露,那你不妨试一下将一些内存申请过程使用智能指针进行实现。
本文暂时没有评论,来添加一个吧(●'◡'●)