Valgrind之Memcheck几种内存错误输出

Valgrind 是在 Linux 系统下程序调试工具的集合,Valgrind包括如下一些工具:

Memcheck 内存检查器,能够发现程序中绝大多数内存错误,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。
Callgrind 检查程序中函数调用过程中的问题:callgrind_annotate callgrind.out.3649
Cachegrind 检查程序中缓存使用的问题。
Helgrind 检查多线程程序中的竞争问题:threadfn
Massif 检查程序中堆栈使用中的问题。
Extension 利用core提供的功能,自己编写特定的内存调试工具。

valgrind –tool=memcheck wireshark

valgrind –tool=memcheck –leak-check=full –show-reachable=yes ./test

memecheck 可以用来寻找 c、c++ 程序中内存管理的错误和内存泄漏,可以检查出下列几种内存操作上的错误:

conditional jump or move depends on uninitialised value(s) //程序的跳转依赖于一个未初始化的变量

内存读写越界:访问了你不应该/没有权限访问的内存地址空间,比如访问数组时越界;对动态内存访问时超出了申请的内存大小范围。
invalid write of size 4 非法写操作
invalid read of size 4 非法读操作

内存覆盖
source and destination overlap in strcpy //源地址和目标地址设置出现重叠

动态内存管理错误

mismatched free () 分配和释放不一致
invalid free() 释放内存函数无效

Use of uninitialised value of size 4 // 非法指针

内存泄漏
Memcheck将内存泄露分为两种,一种是可能的内存泄露(Possibly lost),另一种是确定的内存泄露(Definitely lost)。Possibly lost 是指仍然存在某个指针能够访问某块内存,但该指针指向的已经不是该内存首地址。Definitely lost 是指已经不能够访问这块内存。而Definitely lost又分为两种:直接的(direct)和间接的(indirect),直接是没有任何指针指向该内存,间接是指指向该内存的指针都位于内存泄露处。

==3649== LEAK SUMMARY:
==3649== definitely lost: 40 bytes in 1 blocks.
==3649== possibly lost: 0 bytes in 0 blocks.
==3649== still reachable: 0 bytes in 0 blocks.
==3649== suppressed: 0 bytes in 0 blocks.
==3649== Use –leak-check=full to see details of leaked memory.

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注