一、安装 valgrind
linux环境首先进入root用户
然后执行下面的命令
tar -jxvf valgrind-3.12.0.tar.bz2
cd valgrind-3.12.0
./configure
make
make install
valgrind --version 查看valgrind 版本,并且验证是否安装成功
二、查看内存泄漏示例
#include <iostream>
using namespace std;
int main()
{
char *p = new char[10];
*p = 'a';
*p++ = 'b';
cout << p << endl;
return 0;
}
g++ -g -o core main.cpp
valgrind --leak-check=yes --show-reachable=yes --log-file=a.log ./core
valgrind --leak-check=full --show-reachable=yes --log-file=a.log ./shdaily.fcgi "op=search&date=2011-04-14¤t=4"
--tool=memcheck //使用valgrind的memcheck功能
-show-reachable=yes //是否检测控制范围之外的泄漏,比如全局指针、static指针等
--log-file=a.log //结果输出到文件
--leak-check=full //显示具体代码中泄漏的地方
然后可以看出哪一行内存泄漏了
- 概述
- Valgrind
- 内存泄漏监测
3.1. 示例代码
3.2. 编译它
3.3. 用Valgrind监测进程的内存泄漏
- 内存泄漏监测
- 悬挂指针
4.1. 示例代码
4.2. Valgrind运行结果 - 多次释放同一个指针
5.1. 示例代码
5.2. Valgrind 监测 - Valgrind的优缺点
6.1. Advantages
6.2. Disadvantages - Valgrind的其他工具
7.1. Cachegrind
7.2. Callgrind
7.3. Helgrind
7.4. DRD
7.5. Massif
7.6. DHAT
1 概述
在用C/C++编程的时候,经常会出现下面三种内存问题:
内存泄漏
悬挂指针
多次释放同一块内存
本系列文章简要介绍排查这三个问题的工具和方法,先看看Valgrind
int main()
{
char *p = malloc(sizeof(char) * 10);
if (p == NULL)
{
return 0;
}
*p++ = 'a';
*p++ = 'b';
printf("%s\n", *p);
return 0;
}
来源:51CTO
作者:蜗牛奔跑啦
链接:https://blog.51cto.com/wenxuehui/2433943