valgrind内存检测工具

valgrind 那点事

---------------------------------------
内存检测工具 valgrind
要使用此工具,可以使用--tool=memcheck 在Valgrind命令行上指定。也可以不用指定,因为Memcheck是默认工具。

Memcheck是一个内存错误检测器。它可以检测到C和C ++程序中常见的以下问题。
访问内存不应该,例如溢出和溢出堆块,溢出堆栈顶部,以及在释放内存后访问内存。
使用未定义的值,即未初始化的值或从其他未定义的值派生的值。
堆存储器的不正确释放,如双释放堆块,或错配的使用 malloc/ new/ new[] 与 free/ delete/delete[]
重叠src和 dst指针 memcpy以及相关的功能。
向size内存分配函数的参数传递一个腥意(推测为负值) 。

1.安装:
官网:
http://valgrind.org/

2.安装

[root@cf61420c928a soft]# bzip2 -d valgrind-3.13.0.tar.bz2 
[root@cf61420c928a soft]# tar xf valgrind-3.13.0.tar

查看README后得知:

[root@e46ae471064e valgrind-3.13.0]# ./configure --prefix=/usr/local/valgrind
[root@e46ae471064e valgrind-3.13.0]# make
[root@e46ae471064e valgrind-3.13.0]# make install

show 版本

[root@e46ae471064e valgrind-3.13.0]# /usr/local/valgrind/bin/valgrind --version
valgrind-3.13.0
[root@e46ae471064e valgrind-3.13.0]#

3.测试

==54== 
==54== LEAK SUMMARY:
==54== definitely lost: 112 bytes in 1 blocks
==54== indirectly lost: 0 bytes in 0 blocks
==54== possibly lost: 6,464 bytes in 12 blocks
==54== still reachable: 1,066,645 bytes in 3,864 blocks
==54== suppressed: 0 bytes in 0 blocks
==54== Rerun with --leak-check=full to see details of leaked memory
==54== 
==54== For counts of detected and suppressed errors, rerun with: -v
==54== Use --track-origins=yes to see where uninitialised values come from
==54== ERROR SUMMARY: 42349 errors from 200 contexts (suppressed: 0 from 0)
[root@cf61420c928a GetUrl]#

关于内存泄露
Memcheck将内存泄露分为两种,一种是可能的内存泄露(Possibly lost),另外一种是确定的内存泄露(Definitely lost)。Possibly lost 是指仍然存在某个指针能够访问某块内存,但该指针指向的已经不是该内存首地址。Definitely lost 是指已经不能够访问这块内存。而Definitely lost又分为两种:直接的(direct)和间接的(indirect)。直接和间接的区别就是,直接是没有任何指针指向该内存,间接是指指向该内存的指针都位于内存泄露处。--https://www.ibm.com/developerworks/cn/linux/l-cn-valgrind/index.html

猜你喜欢

转载自www.cnblogs.com/wang-li/p/9179569.html