代码可能存在内存泄露怎么办?
使用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.c
的15
行main
函数中,即调用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
发布评论请先 登录
相关推荐
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就是这样一款优秀的工具。
阐述手机内存与运行内存中的关系及区别
“手机的“内存”通常指“运行内存”及“非运行内存”。手机的“运行内存”相当于电脑的内存,即RAM。而手机的“非运
发表于 07-30 14:17
•6875次阅读
valgrind检测内存问题的原理
valgrind 是一个提供了一些 debug 和优化的工具的工具箱,可以使得你的程序减少内存泄漏或者错误访问。valgrind 默认使用 memcheck 去检查内存问题。memch
评论