windows 版本
windows msvc版本
可以使用vld检测
可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号;可以得到泄露内存的完整数据;可以设置内存泄露报告的级别。
缺点:
1.只针对 Visual C++ (即msvc),mingw不适用,所以 Qt 的项目如果是 mingw编译的需要调整为 MSVCXX 构建。
2、只能检测堆(Heap)上分配的内存泄漏,不能检测资源泄露(如 GDI 等系统资源)。
步骤:
下载vld
VLD的最新版本为2.5.1,下载地址: VLD2.5.1。
或者使用该链接: https://pan.baidu.com/s/12GUr8MhUEzSO1YYTTS4Edg 提取码: 6rgj
安装vld
直接双击安装,选择安装位置,下一步,下一步即可。
将安装目录下的VLD\bin\Win32和VLD\bin\Win64添加到系统环境变量path里。
配置.pro
a.复制vld安装目录下include文件夹中的文件vld.h和vld_def.h到qt具体项目的include文件夹中
b.将“vld安装目录/lib/Win64"或者“vld安装目录/lib/Win32"(注意位数,根据你的Qt库位数确定)下的vld.lib拷贝到qt具体项目的lib目录
c.设置INCLUDEPATH和LIBS
INCLUDEPATH +=$$PWD/../../Include
LIBS += $$PWD/../../lib/mscvdll.lib\
$$PWD/../../lib/Win32/vld.lib
测试:
另外可以在vld.ini设置ReportFile 的具体路径
使用Heob
优点:开源免费,和qt有较好的集成度,配合起来使用非常容易上手。
缺点: 检测使用动态链接库的程序,不能检测出动态链接库中的内存泄漏问题
下载heob
配置
在qt create 的分析菜单下选中hebo.把heob path的路径进行引入.
关闭程序,生成测试报告,leaks.xml文件 或者直接在qt 的memcheck窗口查看。
linux版本
qt 在linux下的版本是mingw编译器。内存泄漏使用的检测工具是valgrind。
参考:https://blog.csdn.net/baidu_16370559/article/details/128493774
步骤:
安装valgrind
可以使用命令行安装,或者源代码下载安装
sudo apt-get install valgrind #命令行安装
检测
点击Qt creator 中的分析菜单,选中Valgrind Memory Analyzer(内存分析器)即可。Qt creator 会调用valgrind自动分析中。Memcheck会记录内存异常列表,包含报错信息和简单调用栈。
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
int *px = (int*)malloc(8 * sizeof(int));
px[9] = 0; //数组下标越界
int a = 1;
}