linux中测试内存泄漏,linux中使用valgrind检测内存泄露

众所周知,c或者c++编写的程序很容易出现内存泄露问题。valgrind是一个很好的工具,可以检测程序中的内存泄露问题。

什么是内存泄露

内存泄露可以分为两种:

一种是,程序中有指针指向通过malloc或者new申请的内存,但是在程序结束前,一直未收回。如果这种内存一直增加的话,可能导致内存耗尽。不过程序结束后系统会自动回收这些内存。

另一种是,通过malloc或者new申请的内存,但是程序中已经没有指针指向申请的内存。程序一直在执行,泄露的内存会越来越多,可能会耗尽程序的堆内存。

如何使用valgrind检测内存泄露

valgrind的使用方式很简单,使用的格式如下:

valgrind 参数 要检测的程序

示例:

$valgrind --leak-check=full ./test

输出结果中有如下字样:

LEAK SUMMARY:

==5578== definitely lost: 0 bytes in 0 blocks

==5578== indirectly lost: 0 bytes in 0 blocks

==5578== possibly lost: 53,201 bytes in 15 blocks

==5578== still reachable: 34,002 bytes in 30 blocks

==5578== suppressed: 0 bytes in 0 blocks

valgrind命令的更多参数可以通过以下命令查看

$valgrind -h

不同内存泄露情况在valgrind中的表现

对于上述的第一种内存泄露的情况,在valgrind的报告中会表示为“still reachable”。

对于第二种情况的内存泄露,在valgrind的报告中会表示为"Directly lost和Indirectly lost"

另外对于valgrind报告中的“possibly lost”,是因为指针没有指向到申请堆的开始。如,c++的string有内存池的概念。如果程序中使用了string,且非正常退出(如使用ctrl+c快捷键终止程序),会报“possibly lost”

关于使用valgrind检测内存泄露更详尽的文档 http://valgrind.org/docs/manual/mc-manual.html#mc-manual.leaks

技术交流

42e1274b8af00aa6b98a5ce9d1810905.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值