valgrind是一个强大的工具,最常用的功能是用它来检测内存泄漏和非法内存的使用。
测试程序编译时,需要加-g进行编译。运行命令:
# valgrind --tool=memcheck --leak-check=yes ./test_demo
生成如下报告:
1. 如果malloc/realloc/calloc和free的数量不同,则会报告如下的内容。
==3375== HEAP SUMMARY:
==3375==     in use at exit: 128 bytes in 1 blocks
==3375==   total heap usage: 4,900 allocs, 4,899 frees, 29,477,380 bytes allocated2. 如果有第一个问题,则会报告哪里申请的内存没有进行释放:
==3375== 128 bytes in 1 blocks are definitely lost in loss record 1 of 1
==3375==    at 0x4C2AC3D: dd (d.c:299)
==3375==    by 0x50C44F2: cc (c.c:112)
==3375==    by 0x5211824: bb (b.c:526)
==3375==    by 0x518643B: aa (a.c:398)
==3375==    by 0x400EB3: main (main.c:37)如上表示在文件d.c的299行,有申请内存,没有进行释放。
3. 使用未初始化的变量:
==3375== Conditional jump or move depends on uninitialised value(s)
==3375==    at 0x5121568: bb (b.c:1035)
==3375==    by 0x511DE92: aa (a.c:60)
==3375==    by 0x400FB3: main (main.c:64)
如上说明,在b.c文件的1035行,使用了未初始化的变量。4. 多次free的问题
==3375== Invalid free() / delete / delete[] / realloc()
==3375==    at 0x4C2BD57: free (vg_replace_malloc.c:530)
==3375==    by 0x4005AA: aa (a.c:9)
==3375==    by 0x4005BA: main (main.c:14)
如上表示,在a.c文件的9行,进行了第2次的free调用。同时也会有如下的提示,表明申请与释放的次数不同。
==3375== HEAP SUMMARY:
==3375==     in use at exit: 0 bytes in 0 blocks
==3375==   total heap usage: 1 allocs, 2 frees, 4 bytes allocated5. 非法内存操作:
==3375== Invalid write of size 4
==3375==    at 0x40059B: aa (a.c:8)
==3375==    by 0x4005BC: main (main.c:14)
==3375==  Address 0x51fc044 is 0 bytes after a block of size 4 alloc'd
==3375==    at 0x4C2AC3D: malloc (vg_replace_malloc.c:299)
==3375==    by 0x40058E: aa (a.c:7)
==3375==    by 0x4005BC: main (main.c:14)
如上表示,使用malloc申请了4个字节的内存,但在a.c的第8行,对第4(从0开始计数)个字节进行了写操作。
valgrind主要检测的是动态内存相关的错误。当然valgrind也只是个工具。应该在平时写代码时组织好代码。

Android使用valgrind内存泄漏和越界检测等相关推荐

  1. 使用valgrind对gperftools(tcmalloc)进行内存泄漏和越界检测

    使用valgrind对gperftools(tcmalloc)进行内存泄漏和越界检测 RToax 2021年3月 1. 问题引入 在<内存分配器ptmalloc,jemalloc,tcmallo ...

  2. valgrind 内存泄漏分析

    valgrind 内存泄漏剖析 简述 valgrind 是 Linux 业内流行且十分强劲的内存泄漏查验专用工具.在其官方网站详细介绍中,运行内存查验(memcheck)仅仅其在其中一个作用.因为仅用 ...

  3. 关于Android应用程序内存泄漏 你需要知道的一切

    关于Android应用程序内存泄漏 你需要知道的一切 原文:https://blog.aritraroy.in/everything-you-need-to-know-about-memory-lea ...

  4. Android中的内存泄漏

    ** Android中的内存泄漏 ** Android中的内存泄漏: 概念:程序在申请内存后,当该内存不需再使用但却无法被释放 & 归还给程序的现象,对应用程序的影响,容易使得应用程序发生内存 ...

  5. 谈谈android中的内存泄漏

    写在前面 内存泄漏实际上很多时候,对于开发者来说不容易引起重视.因为相对于crash来说,android中一两个地方发生内存泄漏的时候,对于整体没有特别严重的影响.但是我想说的是,当内存泄漏多的时候, ...

  6. Android常见的内存泄漏分析

    内存泄漏原因 当应用不需要在使用某个对象时候,忘记释放为其分配的内存,导致该对象仍然保持被引用状态(当对象拥有强引用,GC无法回收),从而导致内存泄漏. 常见的内存泄漏源头 泄漏的源头有很多,有开源的 ...

  7. 基于Android Studio的内存泄漏检测与解决全攻略

    自从Google在2013年发布了Android Studio后,Android Studio凭借着自己良好的内存优化,酷炫的UI主题,强大的自动补全提示以及Gradle的编译支持正逐步取代Eclip ...

  8. Android内存泄漏分析及检测工具LeakCanary简介,androidui库

    Android内存优化是APP稳定运行的重要一环,开发过程中如果代码写的过于随意,很容易造成内存泄漏,多次累积之后,便会产生OOM,进而造成app崩溃.本文介绍了内存泄漏的相关知识和检测工具LeakC ...

  9. Android开源框架——内存泄漏检测工具 LeakCanary

    开源地址:https://github.com/square/leakcanary FAQ : https://github.com/square/leakcanary/wiki/FAQ 配置 bui ...

最新文章

  1. 自定义requestAnimationFrame帧频
  2. UVa 11466 - Largest Prime Divisor
  3. 练习1-17 编写一个程序,打印长度大于80个字符的所有输入行.
  4. python panda apply_python – Pandas – 关于apply函数缓慢的解释
  5. 工具 转_微信文章转 PDF 桌面工具
  6. 【转】概要设计说明书
  7. .NET 产品组问卷调查|和我们分享你的 .NET 使用情况
  8. [译]使用LazZiya.ExpressLocalization开发多语言支持的ASP.NET Core 2.x项目
  9. java 生成二维码
  10. 云端资源,“掌”握手中 ——关于 阿里云 App你不知道的五件事
  11. 邹建的实现分页的通用存储过程
  12. FinSpy 发布 Mac 和 Linux OS 版本攻击埃及组织机构
  13. [恢]hdu 2003
  14. Posix多线程编程学习笔记
  15. emmc host调用mmc_rescan发现设备
  16. css同时多个立方体旋转,CSS3 旋转立方体问题详解
  17. Win11C盘扩容详细教程
  18. leetcode报错reached end of file while parsing
  19. 西电计组II 实验1
  20. Visual C++网络编程经典案例详解 第5章 网页浏览器 CHtmlView类 查看源文件

热门文章

  1. innodb_flush_log_at_trx_commit和sync_binlog参数详解
  2. vba遗传算法之非一致性突变
  3. LoadRunner 中的 Unique Number 参数类型小结
  4. 接 嵌入式设备上的Linux系统开发
  5. RocketMQ-项目集成
  6. 开发者必备英文网站合集
  7. 前端调用mysql异步_python链家网高并发异步爬虫asyncio+aiohttp+aiomysql异步存入数据...
  8. d630无电池升级bios_主板电池没电会怎样?手把手教你拆装主板电池
  9. 微信公众号-关注取消关注后图文和普通消息自动回复
  10. idea lombok插件安装_开发效率不高?墙裂推荐这十款精选 IntelliJ IDEA 插件