千家信息网

C++内存泄漏的排查方法

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,C++内存泄漏的排查方法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一 、经验排查有经验的程序员会对程序中申请内存的地方进行排查,
千家信息网最后更新 2026年10月31日C++内存泄漏的排查方法

C++内存泄漏的排查方法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

    一 、经验排查

    有经验的程序员会对程序中申请内存的地方进行排查,例如malloc或者new关键字的地方进行跟踪,一种情况是我们按照程序逻辑进行了申请和释放,要提防程序在发生异常时没有如我们所期望的那样进行内存释放,此时也应当防止内存泄漏。

    二 、使用Visual Leak Detector for Visual C++

    2.1 Visual Leak Detector for Visual C++简介

    • Visual C++ 提供了内置的内存泄漏检测,但它的功能充其量只是最小的。此内存泄漏检测器是作为 Visual C++ 提供的内置内存泄漏检测器的免费替代品而创建的。以下是 Visual Leak Detector 的一些功能,内置检测器中不存在这些功能:

    • 为每个泄漏块提供完整的堆栈跟踪,包括可用的源文件和行号信息。

    检测大多数(如果不是全部)进程内内存泄漏类型,包括基于 COM 的泄漏和基于纯 Win32 堆的泄漏。

    • 选定的模块(DLL 甚至主 EXE)可以从泄漏检测中排除。

    提供泄漏块的完整数据转储(以十六进制和 ASCII 格式)。

    可定制的内存泄漏报告:可以保存到文件或发送到调试器,并且可以包含可变级别的详细信息。

    其他用于 Visual C++ 的售后泄漏检测器已经可用。但大多数真正流行的,如 Purify 和 BoundsChecker,都非常昂贵。存在一些免费的替代方案,但它们通常太具有侵入性、限制性或不可靠。 Visual Leak Detector 是目前唯一可免费使用的 Visual C++ 内存泄漏检测器,它将上述所有专业级功能整齐地打包在一个易于使用的库中。

    2.2 Visual Leak Detector源码获取编译

    2.2.1 源码获取,相关git地址
       git clone  https://github.com/oneiric/vld
    2.2.2 发布版本获取
    • 在git主页有Visual Leak Detector for Visual C++ Releases,只需要下载对应的版本,进行安装即可。

    2.2.3 进行编译
    • 本代码要求的vs版本为2019,博主使用的版本为为2015,在编译时候会报错

     项目-->属性--->常规-->平台工具集--->选择 Visual Studio 2015(v140)确定,就OK
    2.2.4 自带gtest工程测试
    • 编译项目自带的vld_main进行测试,项目中自带gtest工程对相关内存泄漏场景进行了自测

    2.3 如何测试自己的项目呢

    2.3.1 配置工程

    在自己的工程中引入vld.h文件,并在链接库中配置vld.lib库



    设置当前工程为Debug模式,才能显示堆栈相关的调用信息

    2.3.2 编写简单的测试用例
    • three.h

      #pragma once  class three  {  public:      three();      ~three();  };
    • three.cpp

     #include "three.h" three::three() { } three::~three() { }
    • main.cpp

      #include  #include  #include   #include   #include "three.h"  using namespace std;  int main()  {      cout << "vld test begin" << endl;      int *one = new int[30];      char *two = new char[40];      three * tmp = new three();      return 0;  }
    2.3.3 检测结果如图

    程序执行完之后会在终端显示内存泄漏的的个数,并同时会打印相关的内存泄漏的堆栈信息,当鼠标点击终端信息输出的位置时,同时会在上方代码指示哪一行出现内存泄漏。

    关于C++内存泄漏的排查方法问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

    内存 检测 C++ 信息 工程 检测器 程序 功能 版本 项目 测试 编译 方法 堆栈 问题 代码 地方 文件 更多 源码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网 互联网科技网 互联网科技活动banner 互联网科技英文 互联网科技小贷 腾讯科技 互联网女皇 互联网 视角下的科技创新 互联网巨头投资的硬核科技 蓝色互联网科技 农村开互联网科技讲堂 互联网经济与金融科技 西安小鹰速贷互联网科技有限公司 佛山市拉法互联网科技有限公司 科技互联网的核心竞争力 云南省自由互联网科技有限公司 从那以后互联网科技有限公司 萌小萌互联网科技河南有限公司 银川新华互联网科技学校原画 互联网高科技绘画 银川新华互联网科技学校招聘 新华互联网科技学校 掌上梦互联网科技 中化能源互联网科技招聘 银川新华互联网科技学校联系电话 乌鲁木齐新华智原互联网科技学校 工业互联网山东科技大学 互联网科技平台产品运营 陕西彩京云互联网科技有限公司 10位科技互联网大佬 中国主要互联网科技公司
    0