Valgrind 内存泄漏检测工具

科技   2024-08-15 07:57   上海  

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

由于C和C++程序中常常需要程序员自主申请和释放内存,在大型的、复杂的应用程序中就会常常出现内存错误。Valgrind是linux环境下的一款功能齐全的内存调试和性能分析工具集,它包括MemcheckCallgrindCachegrindHelgrindMassif等工具。

本文分为三个部分:valgrind工具的下载与安装、实例解析、常用选项说明。通过这三部分的学习,读者可以基本掌握valgrind工具的内存调试方法。

1. 下载与安装
sudo apt install valgrind
2. 实例解析
#include<stdlib.h>
#include<iostream>
using namespace std;
void GetMemory(char*p,int num)
{
p=(char*)malloc(sizeof(char)*num);// 申请了内存但是没有释放
}

int main(int argc,char**argv)
{
char*str=NULL;
GetMemory(str,100);
cout<<"Memory leak test!"<<endl;
return 0;
}

编译上述代码,得到可执行文件test。使用Valgrind允许可执行文件如下图所示:
分析结果:
//11950 为进程ID
==11950== 100 bytes in 1 blocks are definitely lost in loss record 1 of 2
==11950== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11950== by 0x4008B1: GetMemory(char*, int) (in /home/zz/code/test)
==11950== by 0x4008E0: main (in /home/zz/code/test)

上面的结果告诉我们是在main中调用了GetMemory导致的内存泄漏,GetMemory中是调用了malloc导致泄漏了100字节的内存。

3. Valgrind工具选项说明

valgrind 命令的基本格式为:valgrind [base option] --tool=<tool name> [tool option] your-program [program options]

本文仅列出了一些常用的选项,更详细的选项说明可参考valgrind home网站上的相关章节(http://www.valgrind.org/)。

a) Valgrind基本选项及其说明
--tool:指定使用的具体工具,可以为Memcheck、Callgrind、Cachegrind、Helgrind、Massif等工具;
b) Memcheck相关选项及其说明
--leak-check=<no|summary|yes|full> [default: summary]:no表示不检测,summary只显示统计信息,yes和full显示详细信息,即上述四种泄露的详细信息。

作者:爱秋刀鱼的猫

原文链接:https://www.jianshu.com/p/3f04e82c087d

参考文献:

【腾讯文档】Camera学习知识库
https://docs.qq.com/doc/DSWZ6dUlNemtUWndv

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

感谢关注,为大佬点赞!

程序员Android
这是一个专注提供 Java Android 知识体系服务的公众号。 和你一起终身学习,小安愿做你成长道路上的垫脚石,不断垫高你的高度,衬托你的威仪。 风里雨里,我们一直在 Java Android 学习的路上支持你!
 最新文章