问题记录:一个局部变量导致的内存泄露(cpp)

问题描述

最近在项目里面写了一个算法,居然有严重的内存泄露问题!!!为了解决这个问题,花了好几天时间,慢慢排除问题,终于解决了,在此记录一下。

阶段一:

刚开始发现问题时,我以为是我 new 出来的对象没有 delete 干净,所以我把所有 new 出来的东西,在使用后立马 delete 掉,所有能用局部变量的就用局部变量,能少用指针就少用指针。
!!!测试不过!!!

这时候应该意识到要看局部变量,没经验啊!

阶段二:

整个算法是以深度优先加并查集为基础的,使用递归方式实现,这时候怀疑递归爆栈了,但是根据测试log发现,递归深度也就几十。不管,递归改迭代!
!!!测试不过!!!与递归无关

阶段三:

并查集只起到辅助作用,删掉!(自己写的并查集类,因为项目都是自己定义的类型,怀疑并查集类写的有问题,项目无法正确释放内存)
!!!测试不过!!!事实证明:并查集没问题!

阶段四:

看到我用项目中的 map 模板,key 和 value 都是类对象,但是项目中也有类似的使用,简单怀疑,抱着试试看的态度修改。
把这个 map 的作用用其他方式替换!
!!!测试通过!!!

原因分析

为什么呢?
项目中原有程序有和我用一样的key,key 可以正常释放,但是项目中的 value 和我用的 value 都不一样,没办法正常释放!!
项目自定义的内存池无法处理我的 map,所以会有内存泄露,虽然这只是一个局部变量!!!

其他

为啥不直接用 asan 分析?
因为恰好最近 asan 环境有问题,只能看到最后一层堆栈信息,是内存池的处理,没啥有用的信息。

为啥花了好几天?
每次测试需要跑大半天,每次信心满满去测试,半天后归来无进展。。。

第一次遇到局部变量导致的内存泄露,记录一下,长个知识。

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

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

相关文章

STM32开发工具STM32CubeMX 6.11.1版本在Windows系统上的下载与安装配置

目录 前言一、STM32CubeMX安装二、使用配置总结 前言 STM32CubeMX是使用STM32微控制器的开发人员不可或缺的工具。该软件配置实用程序由意法半导体精心设计,提供了一个强大的平台,可以轻松高效地配置和初始化STM32器件。在其核心,STM32CubeM…

宠物洗澡机缺水提醒功能如何实现

如今随着养宠物的人越来越多,宠物用品也越来越多,宠物洗澡机也为养宠物的人带来很大方便,在宠物洗澡机内部通常会加一个缺液提醒功能,那么宠物洗澡机缺水提醒功能如何实现,其实只需加一个光电液位传感器即可。 光电液…

实战whisper第三天:fast whisper 语音识别服务器部署,可远程访问,可商业化部署(全部代码和详细部署步骤)

Fast Whisper 是对 OpenAI 的 Whisper 模型的一个优化版本,它旨在提高音频转录和语音识别任务的速度和效率。Whisper 是一种强大的多语言和多任务语音模型,可以用于语音识别、语音翻译和语音分类等任务。 Fast Whisper 的原理 Fast Whisper 是在原始 Whisper 模型的基础上进…

springboot dynamic配置多数据源

pom.xml引入jar包 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.2</version> </dependency> application配置文件配置如下 需要主要必须配置…

动手RAG: ocr调研

对于rag应用来说&#xff0c;文档是第一步&#xff0c;对于部分扫描件的文件来讲&#xff0c;主要就需要OCR. OCR tesseractppocrmmocr OCR包含几类&#xff0c; 自然场景中的文字识别&#xff0c;文档中的文字识别pipeline: 文本检测&#xff0c;文本识别&#xff0c;文…

Android 内存原理详解以及优化(二)

上一篇讲了内存原理&#xff0c;如果还没看可以先看上一篇&#xff1a;Android 内存原理详解以及优化&#xff08;一&#xff09; 这一篇我总结一下我们经常遇到的内存优化问题&#xff1a; 1.内存抖动 自定义view的ondraw是会被频繁调用的&#xff0c;那在这个方法里面就不能频…

全网最简单的Java设计模式【一】设计模式的定义、分类及七大设计原则

引言 Java设计模式从入门到精通-设计模式的定义、设计模式分类及七大设计原则 设计模式简介 在软件开发中&#xff0c;设计模式是解决常见设计问题的最佳实践。它们为开发者提供了一种通用的解决方案&#xff0c;使得代码更加灵活、可复用和可维护。在Java编程语言中&#x…

Linux--V4L2应用程序开发(二)改变亮度

一、思路流程 创建一个新线程用来控制亮度&#xff0c;线程通过读取用户输入来增加或减少亮度值&#xff0c;并使用 ioctl 函数将新亮度值设置到视频设备。 二、代码 /*创建线程来控制亮度*/ pthread_t thread; pthread_create(&thread, NULL, thread_brightness_contrl…

C++利用常量来防止形参误修改

#include<iostream> using namespace std;void displayInfo(const int& num) {// 函数体内不能修改num的值cout << "num " << num << endl; }int main() {int myNumber 5;displayInfo(myNumber);// 传递myNumber的引用&#xff0c;但不…

Latex 绘图:Tikz 包

参考文献&#xff1a; TiKZ入门教程 - LaTeX工作室 (latexstudio.net)Latex-TiKZ绘制数学平面几何图教程_latex绘制几何图形-CSDN博客【TikZ 简单学习(上)&#xff1a;基础绘制】Latex下的绘图宏包-CSDN博客LaTeX—Tikz 宏包入门使用教程 - 知乎 (zhihu.com)Latex 实时编译 &a…

安卓Framework开发快速分析日志及定位源码

文章目录 如何区分源码中 main system events 日志查看 Activity 生命周期日志分析 events 日志在源码中位置应用进程ID助分析具体应用ProtoLog 动态开关日志如何快速定位相关流程的代码位置 本文首发地址 https://h89.cn/archives/285.html 最新更新地址 https://gitee.com/ch…

代码随想录算法训练营第11天|232.用栈实现队列、225. 用队列实现栈、20. 有效的括号、1047. 删除字符串中的所有相邻重复项

打卡Day11 1.232.用栈实现队列2.225. 用队列实现栈3.20. 有效的括号4.1047. 删除字符串中的所有相邻重复项 1.232.用栈实现队列 题目链接&#xff1a;用栈实现队列 文档讲解&#xff1a; 代码随想录 思路&#xff1a;需要用两个栈来实现队列的先进先出。一个输入栈&#xff0…

2024年【建筑电工(建筑特殊工种)】考试报名及建筑电工(建筑特殊工种)考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 建筑电工(建筑特殊工种)考试报名参考答案及建筑电工(建筑特殊工种)考试试题解析是安全生产模拟考试一点通题库老师及建筑电工(建筑特殊工种)操作证已考过的学员汇总&#xff0c;相对有效帮助建筑电工(建筑特殊工种)考…

10年铲屎官亲自体验后,告诉你好用的空气净化器排名

作为一名资深铲屎官博主&#xff0c;很多铲屎官一到春季换季就开始各种疯狂打喷嚏、全身过敏红肿&#xff0c;这是因为猫咪在换季的时候就疯狂掉毛&#xff0c;家里就想下雪一样&#xff0c;空气中都是猫浮毛。而猫毛上附带的细菌会跟随浮毛被人吸入人体&#xff0c;从而产生打…

【redis】redis发布/订阅模型

1、基本概念 Redis 发布/订阅模型&#xff08;Pub/Sub, Publish/Subscribe&#xff09;是 Redis 提供的一种消息通信模式&#xff0c;它允许发送者&#xff08;发布者&#xff09;发送消息到一个或多个频道&#xff08;channel&#xff09;&#xff0c;而接收者&#xff08;订…

Graspnet复现笔记

前言 参考文章&#xff1a;Baseline model for "GraspNet-1Billion: A Large-Scale Benchmark for General Object Grasping" (CVPR 2020).[paper] [dataset] [API] [doc] 代码仓库&#xff1a;https://github.com/graspnet/graspnet-baseline 一、确定配置 Ubunt…

mysql8 锁表与解锁

方法1不行&#xff0c;就按方法2来执行&#xff1b; (一) 解锁方法1 连接mysql &#xff0c;直接执行UNLOCK TABLES&#xff0c;细节如下&#xff1a; – 查询是否锁表 SHOW OPEN TABLES WHERE in_use >0 ; – 查询进程 show processlist ; – 查询到相对应的进程&#xf…

第26集《大乘起信论》

请大家打开《讲义》第五十五页&#xff0c;癸二、释发心。 在大乘的修学当中&#xff0c;我们成就的第一个功德是信成就发心。信成就发心前面一科&#xff0c;先讲到信心的成就&#xff0c;就是我们依止内外善根的熏习&#xff0c;成就所谓的菩萨种性&#xff0c;对于大乘菩萨…

固态硬盘好用,还是机械硬盘好用?

在当前的电脑存储设备市场中&#xff0c;固态硬盘&#xff08;SSD&#xff09;和机械硬盘&#xff08;HDD&#xff09;是两种最主流的选择。它们各有优缺点&#xff0c;适用于不同的使用场景和需求。本文将详细对比固态硬盘和机械硬盘的性能、价格、耐用性等方面&#xff0c;并…

C# 验证PDF数字签名的有效性

数字签名作为PDF文档中的重要安全机制&#xff0c;不仅能够验证文件的来源&#xff0c;还能确保文件内容在传输过程中未被篡改。然而&#xff0c;如何正确验证PDF文件的数字签名&#xff0c;是确保文件完整性和可信度的关键。本文将详细介绍如何使用免费.NET控件通过C#验证PDF签…