c++内存泄露检测

c++内存泄露检测可使用valgrind工具,该可以检测下列与内存相关的问题 :
(1)使用未初始化的内存
提示为
Use of uninitialised value of size
(2) 对释放后内存的读/写
Invalid read of size
3) 对已分配内存块尾部的读/写
Invalid read of size 1
(4) 内存泄露
1 bytes in 1 blocks are definitely lost in loss record 1 of 1
(5) 不匹配的使用malloc/new/new[] 和 free/delete/delete[]
Mismatched free() / delete / delete []
(6)重复释放内存
Invalid free() / delete / delete[]

1.c++内存泄露检测工具下载

ftp://sourceware.org/pub/valgrind/valgrind-3.13.0.tar.bz2

2.安装

解压后

cd valgrind-3.13.0
./configure
make -j8
sudo make install

3.使用 Valgrind Memcheck

1)新建内存泄露程序leaktest

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    char *p = (char*)malloc(1);
    *p = 'a';
    char c = *p;
    printf("\n [%c]\n",c);
    return 0;
}

编译后使用

valgrind --tool=memcheck --leak-check=full ./leaktest

其中

--leak-check=full

表示得到内存泄露的详细细节

结果如下
这里写图片描述

4valgrind定位内存泄漏位置

在后面加上--show-reachable=yes参数
如上例定位内存泄露的位置使用如下命令

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

5.将log输出为文件

 valgrind --tool=memcheck --leak-check=full --show-reachable=yes --log-file=valgridleaktestlog.txt ./leaktest

加上选项
–log-file=valgridleaktestlog.txt
参考
https://blog.csdn.net/jkh753/article/details/12776341

猜你喜欢

转载自blog.csdn.net/ktigerhero3/article/details/80073892