雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

valgrind的使用--检测内存

Posted on 2014-09-05 17:54  huhuuu  阅读(397)  评论(0编辑  收藏  举报

valgrind主要检测内存的使用情况,检测有否内存泄露等。

比如:test_va2.cpp

#include<iostream>
using namespace std;

int main(){
        int i[5];
        char *p;
        char *p2 = new char[123];
        if (i[0] == 0)
                i[1] = 1;
        printf("end\n");
        return 0;
}

 

明显,i[0]的内容未被初始化,p2的内存未被释放。

 

g++ -o test22 test_va2.cpp

valgrind  ./test22

输出如下:

显示 defintely lost(明确的内存泄露)占了123字节在连续的一块内存中。

但是对于 i[0]的内容未被初始化 的错误没有提示出来。

 

g++ -g -o test21 test_va2.cpp

valgrind  ./test21

结果:

 

 

Memcheck 工具主要检查下面的程序错误:

  • 使用未初始化的内存 (Use of uninitialised memory)
  • 使用已经释放了的内存 (Reading/writing memory after it has been free’d)
  • 使用超过 malloc分配的内存空间(Reading/writing off the end of malloc’d blocks)
  • 对堆栈的非法访问 (Reading/writing inappropriate areas on the stack)
  • 申请的空间是否有释放 (Memory leaks – where pointers to malloc’d blocks are lost forever)
  • malloc/free/new/delete申请和释放内存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
  • src和dst的重叠(Overlapping src and dst pointers in memcpy() and related functions)

参考:http://blog.csdn.net/caohao2008/article/details/5682291