VLD(Visual LeakDetector)内存泄露库的简单使用

本文介绍如何使用Visual Leak Detector (VLD) 工具来检测C++程序中的内存泄漏问题。详细步骤包括下载安装、配置环境及代码示例。VLD能够提供详尽的内存泄漏报告,帮助开发者定位问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vld下载http://vld.codeplex.com/ http://www.codeproject.com/Articles/9815/Visual-Leak-Detector-Enhanced-Memory-Leak-Detectio 

安装的时候会有让你选择是否加载库和头文件目录,选择了就不需要手动添加

手动添加:打开Visual C++ IDE的"工具"→"选项"→"项目和解决方案"→"VC++ 目录",在"包含文件"中增加VLD的头文件路径"\include"路径,在"连接器_------>常规——>附加库目录"增加VLD库文件的"\lib\Win32"路径

将VLD加入到自己的代码中。方法很简单,包含vld.h就可以使用vld

#include<string>
#include<sstream>
#include<vector>
#include<algorithm>  
#include<iostream>
#include "vld.h"
using namespace std;
void testNew()
{
	char *data = new char[100];
	data[0] = 'a';
	cout << data[0];
}
void testNewWithDelete()
{
	char *data1 = new char[100];
	data1[0] = 'b';
	cout << data1[0];
	delete[] data1;
	data1 = NULL;
}
int main()
{
		testNew();
		return 0;
}

运行结果


报告列出了内存泄露是在第几块,所在的地址,泄露的字节,调用的堆栈,内存内容。双击调用堆栈可以跳转到所在行。
注意点:在Release模式下,不会链接Visual Leak Detector。

Visual Leak Detector有一些配置项,可以设置内存泄露报告的保存地(文件、调试器),拷贝"\Visual Leak Detector"路径下的vld.ini文件到工程的Debug目录下(在IDE运行的话,则需要拷贝到工程目录下),修改以下项:
ReportFile = name.txt 
ReportTo = both

VLD工具原理

下面我们来看看VLD是如何工作的。在VisualC++中内置工具CRT Debug Heap工具,在使用Debug版本分配内存时,它会在内存块中记录分配该内存的文件名和行号。当程序退出时CRT会在main函数返回时做一些清理工作,此时检查调试堆内存,如果仍然有内存没释放,则一定存在内存泄漏问题。从这些没有被释放的内存块的头中可以得到文件名和行号。这种静态的方法可以检查出内存泄漏,但是不知道泄漏究竟是怎么发生的,也不知道该内存分配语句是如何被执行到的,想要了解这些必须对内存分配过程进行动态跟踪。VLD就是这样做的,在每次内存分配的时候记录其上下文,当程序退出时对检测到的内存泄漏查找其上下文信息,并转换成报告输出到调试窗口中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值