Visual C++内存泄露检测工具(VLD)


前言

C/C++ 程序越复杂,内存的管理显得越重要,稍有不慎就会出现泄漏。如果内存泄漏不是很严重,在短时间内对程序不会有太大影响,这也使得内存泄漏问题有很强的隐蔽性,不易被发现。然而不管内存泄漏多么轻微,当程序长时间运行时,其破坏力是惊人的 - 从性能下降到内存耗尽,甚至会影响其他程序的正常运行。


一、VLD

VLD(Visual Leak Detector)是一款用于 Visual C++ 的免费内存泄露检测工具。相比较其它内存泄露检测工具,它在检测到内存泄漏的同时,还具有如下特点:

  • 可以得到内存泄漏点的调用堆栈,如果可以的话,还能得到其所在文件及行号;
  • 可以得到泄露内存的完整数据;
  • 可以设置内存泄露报告的级别;
  • 它是一个已经打包的 lib,使用时无须编译源码。对于使用者自己的代码,只需要做很小的改动;源码使用 GNU 许可发布,并有详尽的文档及注释。对于想深入了解堆内存管理的读者,是一个不错的选择。

可见,VLD 简单易用。只需要做很小的改动(添加库并包含头文件),然后正常运行自己的程序,就可以发现内存问题;如果深入源码,可以学习到堆内存分配与释放的原理、内存泄漏检测的原理及内存操作的常用技巧等。

二、下载、安装

下载、安装
VLD 主页
文档地址
GitHub 地址
## 2.读入数据

三、使用

要在项目中使用 VLD,请遵循以下简单步骤:

  • 在程序中的至少一个 C/C++源文件中,包括 vld.h 头文件。将包含语句添加到哪个文件并不重要。标头相对于其他标头的包含顺序也无关紧要。唯一的例外是 stdafx.h(或任何其他预编译头)。预编译头(如 stdafx.h)必须始终是源文件中包含的第一个头文件,因此 vld.h 必须包含在任何预编译头之后。
  • 如果程序包含一个或多个 DLL,并且您还希望检查内存泄漏,则还要将 vld.h 包含在要包含在泄漏检测中的每个 DLL 中的至少一个源文件中。
  • 生成程序的调试版本。

注意:与早期(1.9 之前)版本的 VLD 不同,现在可以在每个源文件中包含 vld.h,或者将其包含在许多或所有源文件所包含的公共标头中。只有 VLD 代码的一个副本将加载到进程中,无论有多少源文件包含 vld.h。

配置项目:
附加包含目录:D:\Program Files\Visual Leak Detector\include
附加库目录:D:\Program Files\Visual Leak Detector\lib\Win64
附加依赖项:vld.lib

示例代码:

#include <iostream>
#include <vld.h>
using namespace std;

int main(int argc, char* argv[])
{
	int* aaa = new int[10];
	return 0;
}

结果:
在这里插入图片描述
然后修改对应代码。


除此之外,还可以利用微软的gflags.exe进行检查内存泄露问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Visual Leak Detector是一款免费的、健全的、开源的Visual C++内存泄露检测系统。相比Visual C++自带的内存检测机制,Visual Leak Detector可以显示导致内存泄露的完整内存分配调用堆栈。 下载Visual Leak Detector,当前版本2.2.3,在Visual C++ IDE的"工具"→"选项"→"项目和解决方案"→"VC++ 目录","包含文件"增加VLD的"\include"路径,"库文件"增加VLD的"\lib\Win32"路径,另外动态库"\bin\Win32"路径在安装时已经添加到环境变量里面了,若是未添加,则需要手动拷贝"\bin\Win32"下的文件到工程Debug目录。下 展开查看详细 收起信息 返回顶部 1.新建一个Win32控制台项目; 2.添加代码如下所示: #include "stdafx.h" #include "vld.h" int _tmain(int argc, _TCHAR* argv[]) { char *pBuf = new char[200]; return 0; } 3.在Debug模式下的“输出”窗口,将有如下信息: 报告列出了内存泄露是在第几块,所在的地址,泄露的字节,调用的堆栈,内存内容。双击调用堆栈可以跳转到所在行。 4.在Release模式下,不会链接Visual Leak Detector。 5.Visual Leak Detector有一些配置项,可以设置内存泄露报告的保存地(文件、调试器),拷贝"\Visual Leak Detector"路径下的vld.ini文件到工程的Debug目录下(在IDE运行的话,则需要拷贝到工程目录下),修改以下项: ReportFile = .\memory_leak_report.txt ReportTo = both 直接双击Debug目录下exe,文件内容跟“输出”窗口的内容一样。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值