c++应用程序内存泄露检测

2023-05-16

前言: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字节

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


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++应用程序内存泄露检测 的相关文章

随机推荐

  • C++ String拼接

    做个笔记 看下边的代码 xff1a span class hljs keyword string span str1 61 span class hljs string 34 ls 34 span span class hljs comme
  • xxl-job源码之执行器执行任务的核心流程

    xxl job源码之执行器执行任务的核心流程 先来一张图大致看看 如果看的不清晰 xff0c 可以前往地址 xff1a https www processon com view link 604e0b860791291f25613424 密
  • Choreographer 丢帧计算

    在Logcat中 xff0c 我们经常会看到系统输出如下Log xff1a Choreographer Skipped 180 frames The application may be doing too much work on its
  • JWT的数字签名的简单理解

    一 JWT概念 json web token 二 JWT与原始token的区别 JWT是对原始security的oauth2 token的增强 原始的token只是一个uuid xff0c 没有任何意义 JWT包含了部分业务信息 xff0c
  • Docker容器内部无法访问外网原因之一

    问题描述 部署了一个Docker环境 xff0c 宿主机可以访问Internet xff0c 启动了一个容器发现容器里的服务无法访问Internet xff0c Docker网络使用的是桥接 xff08 bridge xff09 模式 问题
  • nohup: failed to run command `java': No such file or directory解决

    程序里远程执行shell命令 xff08 nohup java jar xff09 的执行 xff0c 后台日志报错如下 xff1a nohup failed to run command 96 java 39 No such file o
  • C++中,两个头文件互相引用(转载)

    定义了两个头文件 a h include 34 b h 34 class a b b1 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 b
  • CEF加载本地H5页面,支持JS和C++交互

    今天闲来无事 xff0c 写个CEF相关的博客 xff0c 很多同学还只会加载简单的CEF控件 xff0c 但是涉及到需要和H5页面交互就比较头疼了 xff0c 今天来简单介绍一下 xff0c 有兴趣可以加qq 295282563 xff0
  • Linux下编译tinyhttpd

    Linux下编译tinyhttpd 来源 xff1a https blog csdn net qq673675158 article details 104927245 spm 61 1001 2014 3001 5506 根据说明 xff
  • 语音编码技术,AMR、AMR-NB、AMR-WB、EVS总结

    最近对实时语音编码技术有点兴趣 xff0c 于是了解了一下 一开始听说AMR NB窄带编码 xff0c 搜索才发现更多的编码技术 xff0c 这里总结一下 xff0c 便于日后查看 一 什么是AMR AMR WB 全称Adaptive Mu
  • xxl-job源码之admin调度中心的线程们

    xxl job中的线程们 启动后 xff0c 从控制台看看admin调度中心 span class token string 34 xxl job admin JobFailMonitorHelper 34 span 64 span cla
  • imx6ull移植OpenWRT系统

    参考 xff1a i mx6ul开发板移植openwrt系统 https blog csdn net qq 40614144 article details 105538483 有几点需要补充 xff1a 1 在imx6ull的Linux内
  • 最近的学习目标

    自己动手编写TCP IP协议栈 xff0c 或者简单点的UDP协议栈 xff0c 参考LWIP协议栈 xff1b 自己动手实现一个HTTP服务器 xff0c 参考tinyhttpd xff0c lighttpd xff0c uhttpd x
  • make[1]: *** 没有规则可以创建“all”需要的目标“hello_world.srec”。 停止。

    在uboot1 1 4目录下 make后 xff0c 出现错误 xff1a make 1 没有规则可以创建 all 需要的目标 hello world srec 停止 发现以下方法可以解决 xff1a 今天在新安装的Debian etch中
  • could not resolve host: github.com 问题解决办法

    点击这里 xff0c 查看相关内容 xff1a https blog csdn net zhenfengshisan article details 57566709
  • 解决无法Ping通Github

    解决无法Ping通Github https blog csdn net u012552275 article details 61654857 Ubuntu平台同理 xff1a gedit etc hosts 在最后添加 192 30 25
  • STM32 ST-LINK Utility介绍、下载、安装、使用方法

    STM32 ST LINK Utility介绍 下载 安装 使用方法 原文如下 xff1a https blog csdn net ybhuangfugui article details 52597133
  • nginx高效内存池分析

    背景分析 nginx作为一个高效的服务器服务器框架 xff0c 在网站搭建领域占领了很大比例 xff1b 以成为不可忽视的一大块领域 xff1b 它能如此高效的运行跟他的优秀的内存管理机制有很大的关系 xff0c 今天抽出时间就来学习和分析
  • 判断字符序列是否为回文

    假设称正读和反读都相同的字符序列为 34 回文 34 xff0c 例如 xff0c 39 abba 39 和 39 abcba 39 是回文 xff0c 39 abcde 39 和 39 ababab 39 则不是回文 试写一个算法判别读入
  • c++应用程序内存泄露检测

    前言 xff1a c 43 43 及c这种底层的编程语言 xff0c 在获得更多程序控制自由度的同时 xff0c 也承担了更多内存泄露的风险 xff0c 有些同学想说 xff0c 内存泄露只要看下c 43 43 的应用程序在运行时内存有没有