c++内存泄露(三):定位和解决内存泄露

如果编写的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可以将日志打印到目标文件内。



如果你的程序还存在内存泄露,那你不妨试一下将一些内存申请过程使用智能指针进行实现。


c++内存泄露(一):理解内存泄漏及内存泄漏常见情况

c++内存泄露(二):使用性能监视器进行内存泄露的确认



猜你喜欢

转载自blog.csdn.net/invisible_sky/article/details/78206380