前言:c++及c这种底层的编程语言,在获得更多程序控制自由度的同时,也承担了更多内存泄露的风险,有些同学想说,内存泄露只要看下c++的应用程序在运行时内存有没有一直增加不就行了吗,windows和linux系统都有现场的工具可以查看,但如果有些内存泄露了,只在程序结束时才被释放出来,从内存的占用量根本看不出来。

valgrind工具是一款在linux系统中运行的可以直接对应用程序进行内存泄露检测的工具,该工具可以直接定位到cpp文件的函数模块,可以说非常细致了,定义到函数模块在检查内存泄露可以说基本没什么问题了。在c++代码中常见的代码泄露问题大致有以下几种:

  1. memset内存块没有释放掉,这种情况其实看系统的占用量就能看出来,一般出现这种情况,内存占用量会一直上升,直到系统崩掉。
  2. malloc内存块没有释放掉;
  3. memset与delete之间不能有return,否则存在内存泄漏风险,在delete之前就已经返回了导致内存没有释放掉。这种情况比较难排查,光看系统内存的占用量是看不出来的,需要用专门的工具才能检测出来。
  4. malloc与free之间不能有return,否则存在内存泄漏风险,在free之前就已经返回了导致内存没有释放掉。同上这种情况也比较难排查。
  5. 访问了已经释放掉的内存区域;
  6. 访问了未定义的内存区域;

通过定义到函数模块再检测泄露的具体行就容易多了。

目录

1 valgrind工具安装

2. 工具使用


1 valgrind工具安装

ubuntu下直接使用命令安装:

sudo apt-get install valgrind 

2. 工具使用

准备好待检测的c++应用程序,打开终端,使用命令:

valgrind --leak-check=full ./test_progress

工具会一步步检测,并运行你的程序,当程序运行完或者你使用ctrl+c暂定后,工具会输出检测的结果:

你可以试一下你自己的应用程序,打马赛克地方就是程序 可能出现内存泄露的地方,可以具体去查一查,但不一定会存在,正如提示的:“are possibly lost in loss record”。

在最后红色框内是总结的内容:

确定存在内存泄露的:1872字节,这个是肯定需要修复的

间接内存泄露的:0字节

可能存在泄露的:这个也有可能是程序没有结束导致的


目前就学到这些,后续有什么新的心得再更新吧。

c++应用程序内存泄露检测相关推荐

  1. Unix下C程序内存泄露检测工具:valgrind的安装使用

    Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Goo ...

  2. linux环境下QT程序内存泄露检测-Qt creator +Valgrind检测内存泄漏(linux)

    原文查看具体内容: Qt creator +Valgrind检测内存泄漏(linux)_枫影竹韵的博客-CSDN博客 一.说明 由于Qt creator和valgrind是相互独立的,所以需要安装va ...

  3. Ubuntu下内存泄露检测工具Valgrind的使用

    在VS中可以用VLD检测是否有内存泄露,可以参考http://blog.csdn.net/fengbingchun/article/details/44195959,下面介绍下Ubuntu中内存泄露检 ...

  4. Android NDK 内存泄露检测

    前言 最近写C++代码,老是担心代码存在内存泄露,胆战心惊的,Andorid中Java层代码内存泄露可以借助leakcanary进行检测:找了一番,找到了PC上C++上的内存泄露检测库LeakTrac ...

  5. memwatch内存泄露检测工具

    工具介绍 官网 http://www.linkdata.se/sourcecode/memwatch/ 其功能如下官网介绍,挑选重点整理: 1. 号称功能: 内存泄露检测 (检测未释放内存, 即 动态 ...

  6. DevPartner Studio Professional Edition 11 内存泄露检测使用

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! DevP ...

  7. 转载浅谈MFC内存泄露检测及内存越界访问保护机制

    2019独角兽企业重金招聘Python工程师标准>>> 本文所有代码均在VC2008下编译.调试.如果您使用的编译器不同,结果可能会有差别,但本文讲述的原理对于大部分编译器应该是相似 ...

  8. 精准 iOS 内存泄露检测工具

    MLeaksFinder:精准 iOS 内存泄露检测工具 发表于 2016-02-22   |   zepo   |   23 Comments 背景 平常我们都会用 Instrument 的 Lea ...

  9. arm linux下交叉编译valgrind工具进行内存泄露检测和性能分析

    C/C++等底层语言在提供强大功能及性能的同时,其灵活的内存访问也带来了各种纠结的问题.如果crash的地方正是内存使用错误的地方,说明你人品好.如果crash的地方内存明显不是consistent的 ...

最新文章

  1. SQL For Xml
  2. Asp.net单点登录解决方案
  3. Unity 游戏开发技巧集锦之创建透明的材质
  4. MAC如何查看某个端口的占用情况
  5. TransmittableThreadLocal 解决 线程池线程复用 无法复制 InheritableThreadLocal 的问题.
  6. 语音编码分类及编解码标准
  7. wordpress后台无法登录问题
  8. curl传post数据流
  9. mysql中只运行一部分数据_MySQL(一)——MySQL基础和部分面试题
  10. 带返回值的函数如何在内部同步?
  11. 软件测试中的接口分析,软件测试接口测试之管理类—叩丁狼分享
  12. umijs 下载文件
  13. C语言实现平衡二叉树
  14. powerDesign导出数据库表结构
  15. java使用memcached
  16. 制定科学学习计划的重要性
  17. 0基础自学鸿蒙-Day_002 HelloWorld
  18. Android工具 - 随机测试(猴子)
  19. 用VS实现图片的读取、显示与存储
  20. 2020-10-22 css画八边形等

热门文章

  1. Error: Cannot find module ‘@/views/xxx‘ at webpackEmptyContext
  2. 转:人的认识如何自我超越
  3. python的书哪个好知乎_python书籍推荐 知乎红色有哪些
  4. 华为开发者联盟上架Android 安装包 包名重复问题
  5. 串口通信--CSerialport类
  6. 中国可以生产计算机cpu吗,国内能不能生产台式电脑使用的CPU?答案当然是肯定的,可以生产...
  7. 华为轮值CEO徐直军全面剖析华为
  8. 工厂设计模式—java
  9. 利用JanusGraph图数据库统计股票涨停板后的走势
  10. 计算机毕业设计Java高考报考指南网站(源码+系统+mysql数据库+lw文档)