最近做项目时用到的--valgrind.

能检测

    1)使用未初始化的内存
    2)读/写已经被释放的内存
    3)读/写内存越界
    4)读/写不恰当的内存栈空间
    5)内存泄漏
    6)使用malloc/new/new[]和free/delete/delete[]不匹配。
最简单的使用: valgrind --leak=check=full  后跟执行文件。

关于内存检测的原理:

 主要就是截获住对分配内存和释放内存的函数的调用。截获住这两个函数,我们就能跟踪每一块内存的生命周期,比如,每当成功的分配一块内存后,就把他的指针加入一个全局的list中;每当释放一块内存,再把他的指针从list中删除。这样,当程式结束的时候,list中剩余的指针就是指向那些没有被释放的内存。

Logo

更多推荐