2024年内存泄漏专题(3)内存泄漏调试神器valgrind_内存泄漏工具 64899,腾讯T4架构师

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

使用Memcheck,可以检查很多内存方面的问题,诸如:

  • 对未初始化内存的使用
  • 内存释放后再次被使用
  • 访问非法内存地址
  • 内存泄漏,即指向一块内存的指针永久性地丢失
  • 内存被double free
  • memcpy相关函数中的dstsrc指针重叠

下面,我们就以一个简单的例子来探讨下,如何使用valgrind来检测内存泄露的问题。

首先,valgrind工具需要安装,安装命令如下:

yum install -y valgrind

valgrind的命令行参数解释:

选项说明
-tool=<name>运行 valgrind中名为toolname的工具。默认m`emcheck
h –help显示帮助信息
-version显示valgrind内核的版本
q –quiet静默运行,只打印错误信息
v –verbose更详细的信息, 增加错误数统计
`-trace-children=noyes`
`-track-fds=noyes`
`-time-stamp=noyes`
-log-fd=<number>输出LOG到描述符文件 [2=stderr]
-log-file=<file>将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID
-log-file-exactly=<file>输出LOG信息到 file
-log-file-qualifier=<VAR>取得环境变量的值来做为输出信息的文件名。 [none]
-log-socket=ipaddr:port输出LOGsocketipaddr:port
-xml=yes将信息以xml格式输出,只有memcheck可用
-num-callers=<number>调用栈层级[12]
`error-limit=noyes`
-error-exitcode=<number>如果发现错误则返回错误代码 [0=disable]
`-db-attach=noyes`
-db-command=<command>启动调试器的命令行选项[gdb -nw %f %p]
`-leak-check=nosummary
`-leak-resolution=lowmed
`-show-reachable=noyes`

接下来,我们以一个具体的例子来说明下如何使用valgrind来检查内存泄漏。示例代码如下:

#include<malloc.h>
​
int main(void){
void \*p1 = malloc(10);
    void \*p2 = malloc(20);
    free(p1);
    void \*p3 = malloc(30);
    free(p3);
    return 0;
}

运行命令如下:

gcc leak.c -g
valgrind --tool=memcheck --leak-check=full ./a.out

运行后,得到如下结果:

==229181== Memcheck, a memory error detector
==229181== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==229181== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==229181== Command: ./a.out
==229181== 
==229181== 
==229181== HEAP SUMMARY:
==229181==     in use at exit: 20 bytes in 1 blocks
==229181==   total heap usage: 3 allocs, 2 frees, 60 bytes allocated
==229181== 
==229181== 20 bytes in 1 blocks are definitely lost in loss record 1 of 1
==229181==    at 0x4C29F73: malloc (vg_replace_malloc.c:309)
==229181==    by 0x40059C: main (leak.c:5)
==229181== 
==229181== LEAK SUMMARY:
==229181==    definitely lost: 20 bytes in 1 blocks


![img](https://img-blog.csdnimg.cn/img_convert/b4a58a18b0e9f9c21ceb8685882e2d2e.png)
![img](https://img-blog.csdnimg.cn/img_convert/579cf1daf422fb98f254cfc15a5231ab.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值