0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用valgrind对代码进行内存泄露检测

麦辣鸡腿堡 来源:嵌入式Linux充电站 作者: Vincent 2023-10-04 14:56 次阅读

代码可能存在内存泄露怎么办?

使用valgrind可以对代码进行内存泄露检测

valgrind下载安装

图片

安装:

1、tar –jxvf valgrind-3.21.0.tar.bz2
2、cd valgrind-3.21.0
3、./configure --prefix=/home/book/valgrind-3.21.0/install
4、make
5、make install

--prefix为指定安装路径,可以不指定,使用默认的,即执行./configure

内存泄露测试

测试程序test.c

分配40个字节的buffer,越界访问buf[10].

#include < stdio.h >
#include < stdlib.h >
#include < unistd.h >

void test()
{

        int *buf = (int *)malloc(10*sizeof(int));
        buf[10] = 0x55;

}

int main()
{
        test();
        return 0;
}

编译:

gcc -g -o test test.c

编译时注意加上-g选项

使用valgrinid测试:

./valgrind --leak-check=yes ./test

图片

结果显示,产生错误的地方在test.c15main函数中,即调用test()函数。具体的在test.c的第9行,test函数内,即buf[10] = 0x55;语句。

根据提示信息,可知valgrind检测到了2个错误:

  • 存在无效的写入数据,即数组越界访问
  • 内存泄露,分配了40字节没有释放
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 测试
    +关注

    关注

    8

    文章

    5285

    浏览量

    126610
  • Linux
    +关注

    关注

    87

    文章

    11296

    浏览量

    209366
  • 内存
    +关注

    关注

    8

    文章

    3020

    浏览量

    74017
  • 代码
    +关注

    关注

    30

    文章

    4780

    浏览量

    68541
  • Valgrind
    +关注

    关注

    0

    文章

    9

    浏览量

    6807
收藏 人收藏

    评论

    相关推荐

    检测内存泄漏和内存违例,Valgrind不可少!

    Valgrind可以检测内存泄漏和内存违例,但是用Valgrind生成的日志信息结合kcachegrind就可以查看C程序的执行线路图,调用
    的头像 发表于 05-07 08:45 6469次阅读
    <b class='flag-5'>检测</b><b class='flag-5'>内存</b>泄漏和<b class='flag-5'>内存</b>违例,<b class='flag-5'>Valgrind</b>不可少!

    使用valgrind代码进行内存泄露检测

    代码可能存在内存泄露怎么办?
    发表于 08-21 15:30 395次阅读
    使用<b class='flag-5'>valgrind</b>对<b class='flag-5'>代码</b><b class='flag-5'>进行内存</b><b class='flag-5'>泄露</b><b class='flag-5'>检测</b>

    嵌入式相关的动态检测工具Valgrind简介

    Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。
    的头像 发表于 11-08 09:41 2009次阅读
    嵌入式相关的动态<b class='flag-5'>检测</b>工具<b class='flag-5'>Valgrind</b>简介

    Linux上对进程进行内存分析和内存泄漏定位

    。(栈)5、采用mmap方式映射到虚拟地址空间中的内存段这是我的机器上,redis 进程的情况,第一行:从r-xp可知其权限为只读、可执行,该段内存地址对应于执行文件的代码段,程序的代码
    发表于 07-09 08:15

    如何用UCOSOIII+MALLOC进行内存管理?

    我想使用UCOSOIII+MALLOC进行内存管理,看了半天不会使用,请问有移植教程或者工程吗?求助各位大神帮忙。PS:我使用的是STM32F407探索者的开发板
    发表于 10-28 02:28

    如何实现FPGA进行内存映射的GPMC接口进行通信?

    我想与使用FPGA进行内存映射(A0-A26和D0-D15)的GPMC接口进行通信。哪些是我需要在FPGA中考虑GPMC通信的所有控制信号?
    发表于 05-01 12:09

    一种利用调试软件Valgrind进行嵌入式应用程序错误查找的威廉希尔官方网站

    本文介绍了一种利用调试软件Valgrind进行嵌入式应用程序错误查找的威廉希尔官方网站 ,利用它可以高效、自动地查找出程序中的多种错误。首先介绍了嵌入式程序常见错误,接着研究了Valgrind的工作原理,介绍了利用
    发表于 04-23 06:49

    valgrind是怎样去移植源码的

    嵌入式内存检测工具-valgrind移植源码较快)准备:解压tar -jxvf valgrind-3.16.1.tar.bz2进入valgrind
    发表于 12-17 07:56

    为什么要进行内存对齐操作呢

    嵌入式开发-内存对齐最近项目中遇到程序报Bus error,经排查发现是内存对齐的原因导致的这个问题,在此纪录总结下一、为什么要进行内存对齐操作平台原因(移植原因):不是所有的硬件平台都能访问任意
    发表于 12-17 06:34

    内存泄露内存溢出是什么意思

    面试题目汇总最重要:简单又重点突出的自我介绍!1、内存泄露内存溢出是什么意思2、static的使用3、break 和continue的区别4、指针函数和函数指针的区别5、数组和链表的区别
    发表于 12-20 07:47

    Linux C/C++内存泄漏检测工具:Valgrind

    Valgrind 是一款 Linux下(支持 x86、x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(C语言中的malloc和free,以及
    发表于 04-02 14:33 617次阅读

    内存泄漏的检测方法

    的。其实不然,防止内存泄露要从良好的编程习惯做起,另外重要的一点就是要加强单元测试(Unit Test),而valgrind就是这样一款优秀的工具。
    的头像 发表于 06-20 11:01 3148次阅读

    阐述手机内存与运行内存中的关系及区别

    “手机的“内存”通常指“运行内存”及“非运行内存”。手机的“运行内存”相当于电脑的内存,即RAM。而手机的“非运
    发表于 07-30 14:17 6875次阅读

    valgrind检测内存问题的原理

    valgrind 是一个提供了一些 debug 和优化的工具的工具箱,可以使得你的程序减少内存泄漏或者错误访问。valgrind 默认使用 memcheck 去检查内存问题。memch
    的头像 发表于 05-23 09:30 2393次阅读
    <b class='flag-5'>valgrind</b><b class='flag-5'>检测</b><b class='flag-5'>内存</b>问题的原理

    mtrace分析内存泄露

    一、mtrace分析内存泄露 mtrace(memory trace),是 GNU Glibc 自带的内存问题检测工具,它可以用来协助定位内存
    的头像 发表于 11-13 10:55 1287次阅读
    mtrace分析<b class='flag-5'>内存</b><b class='flag-5'>泄露</b>