【C/C++基础进阶系列】实战记录 -- 内存泄漏检测相关总结

【1】Windows 下基于 VS2019 的内存泄漏检测

  • 1. 下载安装 VLD 内存泄漏检测工具

VLD 下载链接详见 VLD 下载地址

  • 2. VS 2019 配置 VLD

    • 加入 VLD 头文件与库路径

      • 工程右键 “属性”–>“配置属性”->“VC++目录”–>“包含目录” 添加 VLD 的头文件目录
      • 工程右键 “属性”–>“配置属性”->“VC++目录”–>“库目录” 添加 VLD 的库文件目录

  • 使用 VLD 在项目中包含 vld.h 头文件即可检测项目中的内存泄漏情况,注意 VLD 只能在 Debug 模式下使用,VS 2019 需要开启生成调试信息相关的配置;

  • 3. VLD 配置文件设置

    • 如下配置可以指定 VLD 输出文件并且在屏幕与文件中显示信息
    • VLD 的配置文件应该放在运行程序同一个目录下
; Sets the report file destination, if reporting to file is enabled. A relative
; path may be specified and is considered relative to the process' working
; directory.
;
;   Valid Values: Any valid path and filename.
;   Default: .\memory_leak_report.txt
;
ReportFile = .\memory_leak_report.txt; Sets the report destination to either a file, the debugger, or both. If
; reporting to file is enabled, the report is sent to the file specified by the
; ReportFile option.
;
;   Valid Values: debugger, file, both
;   Default: debugger
;
ReportTo = both

【2】Linux 下使用 Valgrind 检测内存泄漏

  • 1. 安装 Valgrind
apt-get install valgrind
  • 2. Valgrind 检测内存泄漏常见的使用方法
valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all --undef-value-errors=no --log-file=log ./可执行文件名
  • 3. Valgrind 检测结果简介
  • definitely lost : 确认丢失
// definitely lost
char *Fun1()
{char *pcTemp;pcTemp = (char*)malloc(10);return pcTemp;
}
pcTemp 为 char 指针并指向一块分配的内存空间且没有释放造成内存泄漏
  • indirectly lost : 间接丢失
class c1
{
private:char *m_pcData;public:  c1();~c1();
};  c1::c1()
{  m_pcData = (char*)malloc(10);
}c1::~c1()
{  if(m_pcData) delete m_pcData;
}//definitely and indirectly lost
int Fun4()
{c1 *pobjTest;pobjTest = new c1();return 0;
}
类 C1 内部存在私有成员 char 指针,在构造函数中该私有成员 char 指针指向一块分配的内存空间,在析构函数中释放该私有成员 char 指针指向的内存空间
函数 Fun4 中,C1 类型指针 pobjTest 指向了 C1 对象,但未释放 C1 类型指针 pobjTest 指向的对象
因此间接造成 C1 类中私有成员 m_pcData 指向的内存空间泄漏
  • possibly lost : 可能丢失
// possibly lost
char *Fun3()
{static char *s_pcTemp;char *pcData;pcData = (char*)malloc(10);s_pcTemp = pcData + 1;return NULL;
}pcData 为 char 指针指向一块内存区域
s_pcTemp 为静态 char 指针指向了 pcData + 1,s_pcTemp 的生命周期与程序一致
该段代码,pcData 指向的内存未释放,存在内存泄漏,但该内存被 s_pcTemp 指向,因此无法明确判定该块内存是否泄漏
  • still reachable : 可以访问,未丢失但也未释放
// still reachable
char *Fun2()
{  static char *s_pcTemp = NULL;if(s_pcTemp == NULL) s_pcTemp = (char*)malloc(10);return NULL;
}s_pcTemp 为静态 char 指针,其生命周期与程序一致
该段代码分配了内存空间但未释放,存在内存泄漏,只是程序退出时该内存仍可以访问

具体 Valgrind 检测的内存泄漏类型,参见 valgrind检测的5种内存泄漏情况详解

资源下载链接

【1】VLD 下载地址

参考致谢

本博客为博主学习笔记,同时参考了网上众博主的博文以及相关专业书籍,在此表示感谢,本文若存在不足之处,请批评指正。

【1】VS2019 内存泄漏检测工具VLD(Visual Leak Detector)

【2】vs2019使用vld检测内存泄漏

【3】使用valgrind来检查内存泄漏

【4】内存泄露好工具--valgrind的使用

【5】valgrind检测的5种内存泄漏情况详解

【6】使用valgrind工具检查内存泄漏

【C/C++基础进阶系列】实战记录 -- 内存泄漏检测相关总结相关推荐

  1. 【C/C++基础进阶系列】实战记录 -- Dump 文件生成与分析

    [C/C++基础进阶系列]实战记录 -- Dump 文件生成与分析 [1]Windows 端 Dump 文件的捕获与分析 [1.1]添加 Windows 端 Dump 捕获的代码 代码下载,windo ...

  2. 2017年Linux基础进阶系列课-老男孩-专题视频课程

    2017年Linux基础进阶系列课-13877人已学习 课程介绍         本套课程讲解的重要知识点如下: Linux文件属性体系精讲 .Linux正则表达式及grep命令深度讲解.三剑客sed ...

  3. 【C/C++基础进阶系列】特殊函数总结

    [C/C++基础进阶系列]特殊函数总结 [1]__builtin_ 函数总结 __builtin_ffs(x) 函数,返回 x 的最后一位 1 是从后向前第几位 __builtin_clz(x) 函数 ...

  4. 大神匠心打造-零基础到Python工程师视频教程全套白嫖【基础+进阶+项目实战】

    从小白到python开发工程师,只需这套系统教程就够了!!! [零基础python开发工程师视频教程全套,基础+进阶+项目实战] 详情 day1 至day28,python基础: 等级1(python ...

  5. C/C++的内存泄漏检测工具Valgrind memcheck的使用经历

    Linux下的Valgrind真是利器啊(不知道Valgrind的请自觉查看参考文献(1)(2)),帮我找出了不少C++中的内存管理错误,前一阵子还在纠结为什么VS 2013下运行良好的程序到了Lin ...

  6. Android 性能优化之内存泄漏检测以及内存优化(上)

    在 Java 中,内存的分配是由程序完成的,而内存的释放则是由 Garbage Collecation(GC) 完成的,Java/Android 程序员不用像 C/C++ 程序员一样手动调用相关函数来 ...

  7. 自制内存泄漏检测工具

    之前偶然发现,CRT检测内存泄漏的代码其实并不是特别复杂,就是用一个链表记录所有申请出来的内存,然后在程序退出时检测还有哪些内存未被释放.于是有了自制内存泄漏检测工具的想法.基本上是参考这篇文章和CR ...

  8. Android 内存泄漏检测开源库LeakCanary 研究

    1. Android 内存空间不足会引发的问题 1.1 异常 1.2 卡顿 1.3 从 Java 堆内存超限这个问题开始 2. 内存优化着手点 2.1 检测 RAM usage 2.2 进程 2.3 ...

  9. Linux内存泄漏检测工具 Valgrind使用

    一 .valgrind简介 最近在Linux下程序碰到了内存泄漏的问题,所以在网上找了找Linux下的内存泄漏检测工具,找到了Valgrind这款功能很强大的内存调试.内存泄漏检测以及性能分析.检测线 ...

  10. OpenCV中的内存泄漏检测

    转自:http://chaishushan.blog.163.com/blog/static/130192897200911685559809/ 内存泄漏时程序开发中经常遇到的问题. 而且出现内存泄漏 ...

最新文章

  1. python时间处理模块datetime+dateutil、numpy时间处理模块datetime64以及pandas时间处理模块Timestamp的演化路径及常用处理接口
  2. cuda 0 not supported xla
  3. 1107 Social Clusters (30 分)【难度: 中 / 知识点: 并查集】
  4. 迁移学习领域自适应:具有类间差异的联合概率最大平均差异
  5. 让互联网更快的协议,QUIC在腾讯的实践及性能优化
  6. [leetcode] N-Queens II
  7. yeoman生成react基本架构
  8. 台达杯自动化大赛设计方案
  9. 高斯(Gaussian)积分常用式
  10. 倾斜摄影计算机配置,2019年倾斜摄影三维建模-台式、便携、多机集群配置推荐...
  11. 关于limn阶乘/n^n的若干解法(2)
  12. 定制小狼豪(五笔+拼音)输入法
  13. 如何有效的获得高质量的大规模标注数据?
  14. 三菱FX系列PLC数据采集和点表自动侦测
  15. python微博自动评论转发_「Python」 - 自动删除微博评论
  16. 自相关系数、偏自相关系数理解
  17. 从事java的年龄_请教前辈们:JAVA的职业有年龄限制吗
  18. mysql韩语排序_MySQL汉字字段按拼音排序
  19. android高级开发强化实战,高级Android开发强化实战[PDF][215.59MB]
  20. 百度清风算法打击下载违规网站说明

热门文章

  1. List中存放list
  2. jetbrains验证服务器,搭建个人jetbrains授权服务器
  3. js-05--对象是什么、创建对象、对象使用、操作对象、遍历对象、内置对象、Math、任意范围随机数、日期对象、字符串对象
  4. 比较两组数据的差异用什么图更直观_第四节 单因素完全随机实验设计及数据处理...
  5. Coursera 斯坦福大学科学论文写作课程笔记(二)
  6. 数据分析中常见的10种数据编码方式
  7. PCS2021:针对游戏内容的视频编码工具分析和数据集
  8. SAP-FI-财务报表版本设定
  9. 自我介绍Linux运维小白,运维面试自我介绍
  10. php第三方微信app支付接口开发,PHP开发APP微信支付接口