valgrind内存泄露

内存泄露示例代码:

//leak_example.cpp
#include <iostream>
int main() {
    int* ptr = new int(42);
    // 没有释放内存
    // delete ptr;
    return 0;
}

1、安装Valgrind

sudo apt-get install valgrind

2.编译代码

使用g++编译代码,并加上-g选项以包含调试信息,这样 Valgrind 能给出更详细的报告:

g++ -g -o leak_example leak_example.cpp

4. 使用 Valgrind 检测内存泄漏

valgrind --leak-check=full --show-leak-kinds=all ./leak_example

--leak-check=full:开启全面的内存泄漏检测,会详细报告所有可能的内存泄漏情况。
--show-leak-kinds=all:显示所有类型的内存泄漏,包括definitely lost(确定丢失)indirectly lost(间接丢失)possibly lost(可能丢失)still reachable(仍可访问)

5. 分析 Valgrind 的输出结果

在这里插入图片描述
关键信息是 by 0x40069A: main (leak_example.cpp:5),它明确指出内存泄漏发生在 leak_example.cpp 文件的第 5 行。
HEAP SUMMARY:总结了程序运行期间的堆内存使用情况,包括退出时仍在使用的内存、分配和释放的次数等。
definitely lost:表示确定存在内存泄漏,即程序中动态分配的内存没有被释放。在上述示例中,4 bytes in 1 blocks are definitely lost 表明有 4 字节的内存没有被释放。
indirectly lost:间接丢失的内存,通常是由于指向该内存的指针所在的内存块丢失导致的。
possibly lost:可能存在内存泄漏,Valgrind 不能确定这些内存是否真的丢失。
still reachable:程序结束时仍可访问的内存,通常是全局变量或静态变量指向的内存,一般不认为是内存泄漏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值