当前位置: 首页 > news >正文

一个由错误的拷贝构造方式产生的bug

一个由错误的拷贝构造方式产生的bug

\(\qquad\)对自己定义的数据结构进行拷贝构造时,以下的做法是不正确的,会导致极其难以检查的问题,后果很严重:

\(\qquad\)在拷贝一个带有指针的数据结构时采用默认的构造方式或者像我今天干的那样干脆直接不写拷贝构造函数,这会导致其中所有的值被原封不动地复制,包括所有指针和指针指向的内容。如果对原件以及拷贝构造产生的东西中的任意一份进行修改,会导致其他东西也被修改。这个bug是很难检查出来的。

\(\qquad\)今天我尝试实现了一个链表套链表。为了更好地阐述这个bug,我们假设我们有两个链表L和L2。L和L2是带有头结点的链表,其中头结点不存储数据。链表中存储的是一堆由指针连接的节点,头结点在链表类中是以指针形式存储的。我尝试从文件中读入数据并将数据存入链表L,并拷贝构造L放入链表L2,随后清空L,读入下一行数据,不断重复,直至文件读取结束。清空L时,头结点以外的节点会被析构,因为我拷贝出来的东西里面的指针也是完全一样的,这导致程序后续解引用了deleted的指针,产生了极其诡异的错误,如交换两行输入结果截然不同、调试时加一句system("pause")结果截然不同。

\(\qquad\)为了解决这个问题,拷贝链表时应该将所有节点都新建一份,指针也要指向新的节点,头指针指向
新的头节点。如果不当心的话这样的错误以后可能会发生在其他数据结构上。

\(\qquad\)警示后人!!!!!

http://www.gsyq.cn/news/89019.html

相关文章:

  • 极市平台 | NeurlPS‘25开源 | 中科院新作AutoSeg3D:在线分割一切3D物体,超越ESAM!
  • 2025安全婴儿面霜测评:华西珐玛领衔,敏宝护理指南 - 资讯焦点
  • 搜维尔科技:Xsens独立项目-面向独立工作室的高端动作捕捉
  • 毕业设计实战:基于SSM+MySQL的药店管理系统设计与实现,从需求到测试轻松通关!
  • 深夜炸场!GPT-5.2发布;Meta被曝用阿里千问优化新模型;马斯克点赞腾讯游戏业务:他们的品味非常好 | 极客头条
  • Python 面向对象核心概念梳理
  • 某游戏大厂的常用面试问题解析:Netty 与 NIO - 指南
  • 【RCE】利用 Python 沙箱绕过实现任意代码执行的完整案例分析
  • 可信数据空间落地生活:医疗提速、出行省心,这些变化你已受益
  • [JSK]动态数列I
  • springboot基于vue的护士资格在线练习和模拟考试系统的设计与实现_m23x6tm9
  • springboot基于vue的档案室管理系统_gmr7teee
  • 深入解析:STM32 几种烧录方式
  • 基于Web的低代码系统的研究与实现中期检查
  • Airflow - AirflowSkipException
  • 如何快速实现离线人脸识别:FaceAISDK完整指南
  • Nextcloud文件压缩下载实用指南:轻松管理云端文件
  • 内网渗透之横向移动持久化远程控制篇——利用ipc、sc、schtasks、AT,远程连接的winrm,wmic的使用和定时任务的创建
  • 基于WEB的多媒体素材管理库的开发与应用任务书
  • 基于web的二手书交易平台设计与实开题报告
  • 爬取某网站的小说名(pyquery)
  • Android高斯模糊终极指南:Blurry库完全解析
  • 计算机毕业设计springboot基于Java的游乐园管理系统设计与实现 基于Spring Boot框架的Java游乐园综合管理系统开发与应用 Java技术驱动的Spring Boot游乐园运营管理系
  • 基于web的二手书交易平台设计与实现
  • RAD Studio 13 Florence:C++、Delphi现代化与AI驱动的跨平台开发新范式
  • GBase 8a数据库多实例部署流程简介
  • YashanDB数据库的多维扩展能力与性能提升路径
  • COMSOL模拟:单场耦合下的注二氧化碳驱替甲烷模型研究
  • GBase数据库护航国家管网SCADA系统四年无中断平稳运行
  • FunASR语音识别模型部署实战:从训练到生产的完整指南