qt 内存泄漏处理办法

news2024/9/21 22:57:10

windows 版本

windows msvc版本

可以使用vld检测

可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号;可以得到泄露内存的完整数据;可以设置内存泄露报告的级别。

缺点:

1.只针对 Visual C++ (即msvc),mingw不适用,所以 Qt 的项目如果是 mingw编译的需要调整为 MSVCXX 构建。

2、只能检测堆(Heap)上分配的内存泄漏,不能检测资源泄露(如 GDI 等系统资源)。

步骤:

  1. 下载vld

VLD的最新版本为2.5.1,下载地址: VLD2.5.1。

或者使用该链接: https://pan.baidu.com/s/12GUr8MhUEzSO1YYTTS4Edg 提取码: 6rgj

  1. 安装vld

直接双击安装,选择安装位置,下一步,下一步即可。

将安装目录下的VLD\bin\Win32和VLD\bin\Win64添加到系统环境变量path里。

  1. 配置.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有较好的集成度,配合起来使用非常容易上手。

缺点: 检测使用动态链接库的程序,不能检测出动态链接库中的内存泄漏问题

  1. 下载heob

  1. 配置

在qt create 的分析菜单下选中hebo.把heob path的路径进行引入.

  1. 关闭程序,生成测试报告,leaks.xml文件 或者直接在qt 的memcheck窗口查看。

linux版本

qt 在linux下的版本是mingw编译器。内存泄漏使用的检测工具是valgrind

参考:https://blog.csdn.net/baidu_16370559/article/details/128493774

步骤:

  1. 安装valgrind

可以使用命令行安装,或者源代码下载安装

sudo apt-get install valgrind  #命令行安装 
  1. 检测

点击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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/351922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VUE -- defineExpose

defineExpose定义demo定义 defineExpose定义:用于组件通信中父级组件调用操作子组建方法和响应式属性参数能力 在使用definExpose前需要了解两个拷贝对象函数 对象copy:shallowReactive 与 数据 copy:shallowRef 这两个都是vue包里面的 简…

图片文字识别OCR调研-中文

直接看效果对比 tesseract-ocr 该识别引擎最新版本tesseract4添加了支持神经网络(LSTM)的,该引擎专注于线条识别, 同时也保留了Tesseract OCR 引擎,该引擎通过识别字符模式来工作。 我们需求端的后台语言是go&#x…

时尚高级实用,零跑C01满足各种用车需求

零跑C01在新能源车市场上销量可观且口碑较好,为什么消费者会相中这个国产车全域自主研发的新能源车呢?下面的介绍会给出答案。就其外观而言,零跑C01的外观定位于中大型轿车,在外观设计上充分考虑到美学观念。零跑给出了七个车身颜…

扬帆优配|日均客运量恢复,民航业加速复苏,外资买入2股超亿元

春运民航客运量康复至疫情前七成。 2月16日,民航局举行2月例行新闻发布会。会上介绍,自1月7日至2月15日,春运40天,民航运送旅客5523万人次,日均客运量138万人次,同比去年春运添加39%,康复至2019…

Lesson5.1---Python 之 NumPy 简介和创建数组

一、NumPy 简介 NumPy(Numerical Python)是 Python 的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比 Python 自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示…

【贰】嵌入式系统的分类

随手拍拍💁‍♂️📷 日期: 2022.08.31 地点: 杭州 介绍: 2022.08.31下午一点,在闷热的学校里实在是待不下去了,跑到了门口的钱塘江边散了一会儿步🚶正值盛夏,八月即将完结,日子越过越快&#x1…

FPGA MAX 10 10M50系列10M50DAF484C8G/10M50DAF484C7G/10M50DCF484C7G规格

介绍MAX 10器件是单芯片、非易失性低成本可编程逻辑器件(pld),用于集成最优的系统组件集。MAX 10设备的亮点包括:内部存储双配置闪存用户闪存即时支持集成模数转换器(adc)支持Nios II单芯片软核处理器MAX 10设备是系统管理、I/O扩展、通信控制平面、工业、汽车和消费…

ant design vue 组件中经常会出现 label过长被盖住的情况

ant design vue 组件中经常会出现 label过长被盖住的情况,我还特地找了解决方法:当过长时让他换行显示,还写了一篇博客记录,今天同样是写代码,但并没有做特殊的设置,结果却出乎意料的正常,过长自…

2023美赛A题:收干旱影响的植物群落(MCM)思路Python代码

赛题目的:分析干旱程度与植物群落中物种数量的关系赛题解读&解题思路链接: (1)这道题的难点是寻找数据,如果能找到干旱程度的适应性代表的指标以及对应植物群落物种的数量,那这道题基本上是迎刃而解,只需要简单去搭建一个预测模型即可仿真 (2)目标是对马萨马拉这个…

基于dll注入 读取任务管理器中指定进程的详细信息

关键字 注入dll,遍历ListView 技术调研背景 QA测试程序时,往往需要关注进程的性能指标,比如:CPU,GPU,内存,显存。最终根据各个采样数据,生成基于时间轴的状态表(类似任…

37.网络结构与模型压缩、加速-4

37.1 减少网络碎片化程度(分支数量) 模型中分支数量越少,模型速度越快 此结论主要是由实验结果所得。 以下为网络分支数和各分支包含的卷积数目对神经网络速度的影响。 实验中使用的基本网络结构,分别将它们重复10次,然后进行实验。实验结果如下: 由实验结果可知,随着网络…

【JVM与性能调优】JVM常用指令之Javap详解

一、JavaP 命令是什么? JavaP 命令是 Java 语言的一种工具 ,Java中一种反汇编器! 二、JavaP 命令的作用 帮助开发者深入了解 Java 编译器的机制显示字节代码含义显示编译类文件中的可访问功能和数据查看Java类文件中类和接口的内部结构显示…

Mybatis执行完新增操作后,对象的ID主键被修改了的原因【mybatis-spring-boot-starter开源项目的贡献者解答】

Mybatis执行完新增操作后,对象的Id主键被修改了的原因问题由来问题分析解决方案感谢问题由来 首先说下背景,项目的依赖是:mybatis-spring-boot-starter:1.3.2 进行新增操作后,一般来说入库就算完事了,但是除…

基础篇:04-Eureka服务注册与发现

目录 1.Eureka工程搭建启动 打开Idea-Service控制台 2.user-service接入并启动 2.1 引入pom依赖 2.2 更新配置文件 2.3 启动并查看Eureka信息 2.3 复制模拟多实例部署 3.order-service接入并启动 4.常见问题及解决方案 5.总结 6.推荐阅读资料 因前面提到Netflix相关…

webpack -- 无法将“webpack”项识别为 cmdlet

webpack : 无法将“webpack”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 1.检测是否是版本太高而只能使用脚手架进行打包 webpack4.x的打包已经不能用webpack 文件a …

phpStudy服务

1 概述 1.1 安装说明 1. 安装路径不能包含“中文”或者“空格”,否则会报错(例如错误提示:Cant change dir to G:\\x65b0\x5efa\x6587\)保证安装路径是纯净的,安装路径下不能有已安装的V8版本,若重新安装…

数据结构与算法基础-学习-12-线性表之顺序队

一、个人理解队列是线性表的衍生之一,具有先进先出的特性,在队尾进行插入操作,在队头进行删除操作。队列的存储结构分为两个大类,一种是顺序队,就是用数组实现。另一种就是链队,使用链表实现。顺序队存在真…

20基于主从博弈的智能小区代理商定价策略及电动汽车充电管理MATLAB程序

参考文档:《基于主从博弈的智能小区代理商定价策略及电动汽车充电管理》基本复现仿真平台:MATLABCPLEX/gurobi平台优势:代码具有一定的深度和创新性,注释清晰,非烂大街的代码,非常精品!主要内容…

Vue3路由传参

vue3路由和vue2差别不是很大,不过在传参形式上略有改变 在Vue3中使用路由必须引入 useRouter 和 useRoute import { useRoute, useRouter } from vue-routerconst Router useRouter() //跳转const Route useRoute() //获取到值 同Vue2一样,query使用p…

实用调试技巧【下篇】

🔴本文章是在 Visual Studio 2022(VS2022)编译环境下进行操作讲解 文章目录3.2.调试的时候查看程序当前信息3.2.1.查看临时变量的值3.2.2.查看内存信息3.2.3.查看调用堆栈3.2.4.查看汇编信息🥳4.调试实例🥳5.如何写出&…