当前位置: 首页 > 科技观察

有了它,你再也不怕C++内存泄露了!

时间:2023-03-21 17:11:56 科技观察

C/C++程序越复杂,内存管理就越重要,一不小心就会发生泄漏。如果内存泄漏不是很严重的话,短时间内不会对程序造成太大的影响,这也使得内存泄漏问题非常隐蔽,很难被发现。然而,无论内存泄漏多么轻微,当一个程序长时间运行时,其破坏力是惊人的——从性能下降到内存耗尽,甚至影响其他程序的正常运行。一、VLD简介VLD(全称:VisualLeakDetector)是一款免费的VisualC++内存泄漏检测工具。与其他内存检测工具相比,它在检测内存泄漏时还有以下特点:可以得到内存泄漏点的调用栈,以及它的文件和行号;您可以获得泄漏内存的完整数据;您可以设置内存泄漏报告级别;提供打包好的lib库,无需编译源码,直接使用;源代码在GNU许可证下发布,并有详细的文档和注释。对于想深入了解堆内存管理的读者来说是一个不错的选择。VLD使用方便,只需要添加库和include头文件,然后正常运行自己的程序,就能发现内存问题;如果深入源码,可以了解到堆内存分配和释放的原理、内存泄漏检测的原理、内存操作的常用技巧等。2、下载并安装VLD主页:https://kinddragon.github.io/vld/文档地址:https://github.com/KindDragon/vld/wikiGitHub地址:https://github.com/KindDragon/vld进入首页后,点击右上角“下载安装程序”按钮,下载VLD安装程序(当前版本:vld-xxx-setup.exe):下载完成后,进行傻瓜式安装(nextstep...nextstep)安装后的目录如下:其中,每个目录及其内容为:bin:包含运行时的库文件——dbghelp.dll、vld_x64.dllinclude:包含头文件用于编译的文件-vld.H。vld_def.hlib:包含用于编译的库文件-vld.lib3。如何使用创建一个新的C++控制台程序:#includeintmain(){int*a=newint[10];return0;}然后,配置项目:Additionalincludedirectory:D:\ProgramFiles\VisualLeakDetector\include附加库目录:D:\ProgramFiles\VisualLeakDetector\lib\Win64附加依赖:vld.lib到目前为止,VLD支持到VS2015,关于VS2019内存泄漏的信息不多,你可以在属性设置中配置:在Debug模式下运行程序,VLD会输出内存泄漏报告,其中包含完整的调用堆栈:你看,第5行有内存泄漏,还等什么,快点并解决它:#includeintmain(){int*a=newint[10];delete[]a;return0;}再次运行程序,内存泄漏消失了: