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