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

article/2025/9/18 15:45:35

一、内存泄漏

1、什么是内存泄露
由于疏忽或者错误(异常安全)导致程序未能释放已经不再使用的内存的情况。内存泄露并非是指内存在物理上的消失,而是指程序失去了对该内存的控制,导致的资源浪费。

2 、内存泄露的分类
a、堆内存泄露(Heap Leak)
通过malloc,realloc,new等方式从堆中分配的内存,并且完成后必须通过调用对应的free,delete 释放。如果程序的设计的错误导致这部分内存没有被释放,那么此后这块内存将不会被使用,就会产生Heap Leak。

b、系统资源泄露(Resource Leak)
使用系统分配的资源比如 :Bitmap,SOCKET 等没有使用相应的函数释放掉。导致系统资源的浪费,严重可导致系统效能降低,系统运行不稳定。

3、内存泄露的危害
a、如果申请的内存没有释放,随着进程的正常结束,则这个内存会被自动释放。
b、长期运行的程序遇到内存泄漏的问题,危害就非常的大。比如:操作系统、服务器,这些程序长期运行,若遇到内存泄露的问题会导致可用的内存越来越少,某些服务的操作失败(打开文件、创建套接字、发送数据)。

二、VLD简述

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

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

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

若为Linux环境强烈推荐使用Valgrind
推荐文章:
内存泄漏检测工具valgrind神器
C++内存泄漏检查工具——Valgrind(–tool = memcheck)

三、VLD内存泄漏检测原理

1、Visual Leak Detector在Debug使用malloc,realloc,new等方式从堆中分配的内存,会在内存块的头中记录分配该内存的文件名及行号。当程序退出时CRT会在main()函数返回之后做一些清理工作,这个时候来检查调试堆内存,如果仍然有内存没有被释放,则一定是存在内存泄漏。从这些没有被释放的内存块的头中,就可以获得文件名及行号,并将其转换成报告输出。
2、Visual Leak Detector将其初始化设置在compiler段,从而使得它在绝大多数全局变量和几乎所有的用户定义的全局变量之前初始化。

四、下载、安装

CSDN下载:https://download.csdn.net/download/qq_43148810/34865979
Visual Leak Detector官网、下载:https://kinddragon.github.io/vld/

进入主页后,点击【Download Installer】按钮进行下载 VLD 最新版本。
下载完成解压安装即可。
安装目录下有:

  • bin(32位和64位的dll和pdb文件,以及Microsoft.DTfW.DHL.manifest文件)文件夹
  • inclode(vld.h和vld_def.h头文件)文件夹
  • lib(32位和64位的vld.lib)文件夹
  • vld.ini(配置)文件

五、Visual Studio中使用

1、配置项目:
四步骤中软件安装已为VS2008-2015所有项目设置了【C/C++——常规——附加包含目录】:C:\Program Files (x86)\Visual Leak Detector\include,以及【链接器——常规——附加库目录】:C:\Program Files (x86)\Visual Leak Detector\lib\Win64(Win32)。

  • 项目代码中可直接#include"vld.h";
  • 【链接器——输入——附加依赖项】中添加vld.lib;
  • 安装目录Bin文件夹的对应版本文件夹(Win32或Win64)所有文件拷贝至输出目录。
    2、测试工程代码
#include <iostream>
#include "vld.h"int main(int argc, char* argv[])
{char *pBuf = new char[200];return 0;
}

运行完成后查看控制台输出或者VS的输出窗口。
在这里插入图片描述
报告列出了内存泄露是在第几块、所在的地址、泄露的字节、调用的堆栈、内存内容。双击调用堆栈可以跳转到所在行。

六、Qt中使用

1、新建一个 Qt Console Application,在 .pro 文件中添加如下内容

# 只有在 Win32 下才可使用
win32 {CONFIG(debug, debug|release) {  # 需要基于 Debug 模式DEFINES += VLD_MODULEVLD_PATH = "D:/Program Files/Visual Leak Detector"INCLUDEPATH += $${VLD_PATH}/includeLIBS += -L$${VLD_PATH}/lib/Win32 -lvld}
}

main.cpp 文件如下所示:

#include <QCoreApplication>// 添加 VLD 头文件
#ifdef VLD_MODULE
#include "vld.h"
#endifint main(int argc, char *argv[])
{QCoreApplication a(argc, argv);char *pBuf = new char[200];return a.exec();
}

编译运行,在 Qt Creator 的应用程序输出窗口中将会出现和 Visual Studio 中类似的内存泄露信息。
使用 VLD 检测内存泄露很容易,但在使用过程中,需要注意以下几点:

  1. 需要在 Debug 模式下使用。如果是 Release 模式,则不会链接 VLD。
  2. 只能使用 VC++编译器。这也是美中不足的一点,如果使用 Qt,只能先使用 VC++ 编译器捕捉并解决内存泄露,再考虑使用mingw(gcc/g++)编译程序。

Visual Leak Detector官网、下载:https://kinddragon.github.io/vld/
相关文章推荐:https://waleon.blog.csdn.net/article/details/52789085
https://blog.csdn.net/Outtch_/article/details/108677744

valgrind开源动态分析系统:
内存泄漏检测工具valgrind神器:https://zhuanlan.zhihu.com/p/75416381
Valgrind学习总结:https://blog.csdn.net/andylauren/article/details/93189740

如有错误或不足欢迎评论指出!创作不易,转载请注明出处。如有帮助,记得点赞关注哦(⊙o⊙)
更多内容请关注个人博客:https://blog.csdn.net/qq_43148810


http://chatgpt.dhexx.cn/article/LukNKgDh.shtml

相关文章

Qt Creator 安装 VLD

Qt Creator 安装 VLD 2015-04-14 16:52:55 你好L 阅读数 2325更多 分类专栏&#xff1a; qt 版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/lin…

vld检测不输出_原创干货 | 基于机器学习的webshell检测踩坑小记

目录 “文章部分内容引用自兜哥作品” 0x01 机器学习衡量指标 0x02 数据集 0x03 特征提取 0x04 模型训练及检测 0x05 预测新样本 0x06 优化检测 前言 本人是合合信息(划重点——“OCRAI大数据公司”)安全部门的一名成员&#xff0c;受到公司AI氛围的感染&#xff0c;对于不会AI…

使用 VLD 检测内存泄漏

背景 在实际的项目实践中&#xff0c;随着程序越复杂&#xff0c;内存管理就显得越重要。虽然有许多方法可以防止内存泄露&#xff0c;但在实践中还是难免出现内存泄露的情况&#xff0c;并且内存泄露问题很难被发现和定位其位置。 VLD Visual Leak Detector 是一款用于 C 的…

使用vld查看OPCode

本文转载自&#xff1a;https://gywbd.github.io/posts/2016/2/vld-opcode.html 前几天翻译了一篇关于Zend引擎的文章&#xff0c;这篇文章主要是讲Zend引擎怎么执行PHP代码的&#xff0c;确切地说是怎么执行OPCode的&#xff0c;因为PHP程序会先被编译为中间形式&#xff08;…

php windows vld,PHP之opcode及VLD使用

OpCode&#xff0c;即Operation Code&#xff0c;操作码。通常是指计算机指令中的一部分&#xff0c;用于指定要执行的操作&#xff0c; 指令的格式和规范由处理器的指令规范指定。 通常opcode还有另一种称谓&#xff1a;字节码(byte codes)。例如Java编译后生成的class文件。 …

vld扩展

PHP代码的执行实际上是在执行代码解析后的各种opcode。通过vld扩展可以很方便地看到执行过程中的opcode。 一、安装vld扩展 git clone https://github.com/derickr/vld.git cd vld phpize ./configure --with-php-config/usr/local/php71/bin/php-config --enable-vld make &am…

vld使用

vld是一款免费的Visual C内存分析工具&#xff0c;下面来介绍一下怎么在qt中使用vld。 1.下载。去官网http://vld.codeplex.com/下载&#xff0c;我下的是2.5.1版本 2.安装。在安装目录下找到vld.lib文件。有32位和64位的注意位数。复制到qt安装目录的lib文件夹中 复制vld安装…

WINDOWS下内存泄漏检测工具VLD(Visual Leak Detector)的使用

VLD安装&#xff1a; https://kinddragon.github.io/vld/ 点击下载安装器 安装完成后&#xff0c;会自动将其include目录添加到VS的附加安装目录&#xff0c;将其静态库目录(lib目录)添加到VS的附加库目录&#xff0c; 无需手动添加include目录和lib目录 VLD使用&#xff1…

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

VLD简介 由于C/C语言没有所谓的垃圾收集器&#xff0c;内存的分配和释放都需要程序员自己来控制&#xff0c;这会给C/C程序员带来一定的困难。当您的程序越来越复杂时&#xff0c;它的内存管理也会变得越来越困难。内存泄漏、内存越界是最常见的内存问题之一。内存泄漏如果不是…

内存泄漏查找工具VLD的使用

1.什么是vld&#xff1f; Visual Leak Detector(VLD)同样是一款开源检测内存泄露软件的简称。 官方的介绍如下地址&#xff1a;在Visual Studio调试器下运行程序时&#xff0c;Visual Leak检测器将在调试会话结束时输出内存泄漏报告。泄漏报告包括完整的调用堆栈&#xff0c;显…

检查内存泄露的利器--VLD使用指南

1. VLD简介 Visual Leak Detector是一个免费的&#xff0c;强大的&#xff0c;开源的,可视化C 内存泄漏检测工具。 VLD容易使用。安装后&#xff0c;只需告诉Visual C 在哪里可以找到包含的头文件和库文件。然后&#xff0c;只需将以下行添加到代码中&#xff0c;即可将其与任…

内存泄露检测工具VLD(Visual Leak Detector)使用说明

目录 一、内存泄漏问题 二、VLD工具使用说明 1 下载VLD 2 安装VLD 3 使用VLD&#xff08;第一个种方法&#xff09; 3.1 附加头文件目录 3.2 附加库目录。 4 使用VLD&#xff08;第二个种方法&#xff09; 4.1 打包VLD_SDK 4.2 附加头文件目录 4.3 附加库目录。 5 …

【矩阵论】范数和矩阵函数(2)

范数及矩阵函数之收敛性与矩阵函数 定义矩阵的范数是为了讨论矩阵的收敛性。 注&#xff1a;范数和矩阵函数这个系列的&#xff08;1&#xff09;&#xff08;2&#xff09;等划分是按照章节来的&#xff0c;与视频的分集并不完全一致。 一. 收敛定理 1. 按坐标收敛 2. 按范数…

向量范数和矩阵范数的理解

向量范数 今天来聊一聊机器学习矩阵论的相关知识——范数&#xff08;Norm&#xff09;。 在学习机器学习基础算法的推导过程中&#xff0c;可以看到很多地方都应用到了这个范数。范数属于矩阵论的知识范围&#xff0c;可见数学基础的重要性。 机器学习的数学基础重点推荐—…

【矩阵论】范数和矩阵函数(1)

范数及矩阵函数之范数的概念 首先将本章的内容做以下大致的梳理&#xff1a; 我们通过范数的概念来解决矩阵函数的问题&#xff0c;利用矩阵的函数可以解决很多实际问题。 一. 概念与定义 1. 范数与赋范线性空间 &#xff08;1&#xff09;范数——向量空间上的满足某些性质…

矩阵范数与矩阵的模

矩阵范数&#xff08;matrix norm&#xff09;是数学中矩阵论、线性代数、泛函分析等领域中常见的基本概念&#xff0c;是将一定的矩阵空间建立为赋范向量空间时为矩阵装备的范数。应用中常将有限维赋范向量空间之间的映射以矩阵的形式表现&#xff0c;这时映射空间上装备的范数…

【数学】向量范数和矩阵范数(几种范数 norm 的简单介绍)

目录&索引 一、什么是范式&#xff1f;二、向量范式1-范数2-范数P-范数∞-范数-∞-范数 三、矩阵范式1-范数2-范数∞-范数F-范数 四、小结 一、什么是范式&#xff1f; 范数&#xff0c;是具有“长度”概念的函数。在线性代数、泛函分析及相关的数学领域&#xff0c;范数是…

鬼畜视频制作必备——vegas pro特别版歌声合成工具UTAU

很好奇鬼畜是怎么做出来的&#xff1f;绝大部分up主用的必备的就是vegas&#xff0c;剪视频比较全能&#xff0c;比如&#xff1a;添加字幕、旋转视频、导入导出视频、导入导出视频等等&#xff0c;同时还提供了先进的悬停取消技术、高分辨率格式高达4K的音频素材以及支持4K UH…

平板电脑必装十大软件_知乎高赞回答:职场新人必装的电脑软件有哪些?太全了!...

本文首发于知乎,我觉得对大家很有帮助,因此同步了过来。 来源 :Tools指南知乎号 之前在微博上看到一篇文章,其中有一点让我很诧异:一个新入职的员工,不知道用什么软件打开rar压缩包。 但想到我刚入职场时,也是这个样子,马上就释然了。 但有一个新的问题出现了:刚入职场…

动态图册用HTML怎么制作,imgplay gif动图制作如何使用?imgplay图文使用教程

imgplay是一款利用图片、视频就能轻松制作GIF的应用软件。通过这款软件&#xff0c;大家可以切身感受拍照片和视频时的精彩瞬间&#xff0c;下面小编就为大家讲解imgplay软件的使用方法。 推荐下载&#xff1a; 软件名称&#xff1a;imgplay gif动图制作软件 3.0.1 官网安卓版软…