C++个人错误编写01---delete完new分配的对象后,没有将其手动置为nullptr。

C++ 知识补充 向量(vector)是一个封装了动态大小数组的顺序容器(SequenceContainer)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。C++中map提供的是一种键值对容器,里面的数据都是成对出现的,如下图:每一对中的第一个值称之为关键字(key),每个关键字只能在map中出现一次;第二个称之为该关键字的对应值。 阅读详情

1。delete完new分配的对象后,没有将其手动置为nullptr。

在C++中,使用delete操作符释放通过new分配的内存时,不会自动将指针设置为nullptr(或NULL)。这意味着指针在删除后仍然指向原来的内存地址,尽管这块内存已经被标记为可再次分配。访问这样的指针会导致未定义行为,因为所指向的内存可能已经被分配给其他数据,或者已经被操作系统回收。
因此,作为一种良好的编程实践,在对指针使用delete之后,应该手动将其设置为nullptr。

int* p = new int(10);
delete p;
p = nullptr; // 手动将指针设置为空,避免悬挂指针问题

这样做有助于防止悬空指针的问题,并且在尝试访问或删除一个已经设为nullptr的指针时,程序的行为是定义好的(即不会导致段错误等),尽管这并不能解决所有与内存管理相关的问题。例如,尝试删除一个nullptr指针是安全的,delete操作会直接返回而不进行任何操作。
在这里插入图片描述

拓展

在C++中,“删除一个指针”实际上指的是释放指针所指向的内存,而不是删除指针变量本身。指针本身是一个局部或全局变量,它存储的是内存地址,而“删除”操作是通过delete(对于用new分配的单个对象)或delete[](对于用new[]分配的数组)来释放指针所指向的那块内存。
以下是具体的操作步骤:

1、释放单个对象的内存:如果你使用new分配了一个单独的对象,则应使用delete来释放它。

int* p = new int(10); // 分配一个整数并初始化为10
delete p; // 释放p指向的内存
p = nullptr; // 可选:将指针置空,避免悬空指针问题

2、释放数组的内存:如果你使用new[]分配了一个数组,则必须使用delete[]来释放这个数组。

int* arr = new int[10]; // 分配一个包含10个整数的数组
delete[] arr; // 使用delete[]释放数组
arr = nullptr; // 可选:同样推荐将指针置空

重要的是要注意,使用delete和delete[]时要与分配内存时使用的new和new[]相对应。如果对用new[]分配的数组使用delete,或者对用new分配的对象使用delete[],会导致未定义行为。

此外,正如之前提到的,虽然不是必须的,但在释放内存后将指针设置为nullptr是一种良好的实践,可以防止出现悬空指针的问题,并有助于提高代码的安全性和可维护性。

让 ABAP 开发者也能做出高质量 SAP Fiori:到底需要掌握多少前端知识? 文章摘要: 随着SAP技术演进,ABAP开发者的角色边界正在重构。传统SAP GUI时代的全栈开发模式逐渐转向RAP+Fiori Elements的新范式,其中关键技术变化包括: 开发模式转变:从前后端耦合转向RAP模型驱动开发,通过CDS注解实现UI意图表达 分工优化:Fiori Elements模板处理80%标准UI需求,Flexible Programming Model解决20%差异化需求 效率提升:注解驱动开发可在RAP建模阶段同步定义UI结构,大幅缩短交付周期 工具整合:SAP提供从建模到部署的 阅读详情

相关推荐

Dify 从入门到精通:第一篇 - 基础介绍与快速上手

Dify是一个开源的低代码平台,旨在简化大型语言模型(LLM)应用的开发流程。本文作为"Dify从入门到精通"系列的首篇,全面介绍了Dify的核心概念、安装步骤和基本使用方法。文章首先解析了Dify的多模型支持、低代码开发等特点,然后详细讲解了基于Docker的安装配置过程,包括系统要求、环境变量设置等。通过创建一个邮件助手应用的实际示例,展示了Dify的可视化工作流设计功能。最后简要介绍了高级特性和最佳实践,为后续深入学习奠定基础。本文为开发者提供了从零开始使用Dify构建AI应用的完

IT深耕十余载,大道之简 1147

delete之后还需要置NULL吗?

目录 1 问题 2 解答 2.2 实验 2.3 为什么会这样? 3 结论 1 问题 对指针变量进行delete操作后,还需要置NULL吗?如下面的常见操作: node* temp = tree.get_root(); ..... delete temp; temp = NULL; 最后的一句temp = NULL;是否多余? 2 解答 答案是,这样做是必要的。 2.2 ...

yikunbai5708的博客 4467

Goose开源程序本地机上 AI 代理,能够从头到尾自动执行复杂的开发任务。Goose 不仅可以提供代码建议,还可以自主构建整个项目、编写和执行代码、调试故障、编排工作流程以及与外部 API 交互

Goose开源程序 是您的本机上 AI 代理,能够从头到尾自动执行复杂的开发任务。Goose 不仅可以提供代码建议,还可以自主构建整个项目、编写和执行代码、调试故障、编排工作流程以及与外部 API 交互。无论您是在构建想法原型、优化现有代码,还是管理复杂的工程管道,goose 都能适应您的工作流程并精确执行任务。

struggle2025的博客 2041

C++在delete指针之后是否要置为null

C++ 中delete一个指针之后,只是回收该指针指向的堆空间,而指针本身的值不变(也就是说delete并不将指针删除,同时指针仍然指向原来的那个地址)需要手动将其赋值为NULL。 ...

deeplan_1994的博客 1537

把数据库事务边界握在手里:ABAP 里的 COMMIT CONNECTION 与 ROLLBACK CONNECTION 深度拆解

与表面是两条很短的语句,背后却牵动了连接管理、数据库 LUW、SAP LUW、隐式提交、游标生命周期、GTT 平台差异等一整片工程现实。把它们用对,你就能在不破坏主业务事务的前提下,实现跨库写入、审计落库、隔离型日志、数据集成落地等一系列“看似矛盾”的目标;用错了,它们也会悄无声息地制造一致性缺口,让问题在高峰期以 dump 或数据异常的方式爆出来。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1841

保姆级教程解决Edge Copilot该服务在你所在的地区不可用及Sign in to continue your chat.——电脑篇

相信很多人更新到Win11之后都注意到自带的浏览器右上角多了一个Copilot,这个副驾驶是微软与OpenAI合作,免费使用,包括插件功能。相当于你可以在电脑上免费的使用GPT4。很可惜,点开提示该服务在你所在的地区不可用。很多人第一时间想到科学的上网应该就可以解决了,尝试后又提示you’ve reached the conversation limit for today.Sign in to continue your chat.明明登录账号了为什么还是不能用?不是免费吗,为什么提示今天受限制。 其实上

weixin_44887342的博客 5万+

C++中指针free/delete后为什么要刻意指向NULL

这是因为指针p被free/delete之后,没有置为NULL(最好加一句p=NULL;),经常性的我们会以为p是个合法的指针。他们只是把指针指向的内存给释放掉,并没有把指针本身干掉,此时指针指向的就是“垃圾”内存。所以我们应该在释放完之后,立即将指针置为NULL,防止出现乱指的情况。野指针是指向不可用内存区域的指针(非法内存,垃圾内存)。野指针不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为if语句能够判断。但是野指针是很危险的,if不能判断一个指针是正常指针还是野指针。...

Rolandxxx的博客 2761

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

perseverance51博客 4235

指针delete后为什么要置空

转载: C++指针delete后还要置为null_热带巨兽的博客-优快云博客_delete指针后,需要置为null

qq_38409301的博客 1212

YOLO26改进策略【小目标改进】| 添加专用于小目标的检测层 附YOLOv1~YOLOv11的检测头变化详解

在目标检测领域,小目标检测一直是一个具有挑战性的问题。算法以其高效快速的特点受到广泛关注,然而在面对小目标时,仍存在一些局限性。本文将介绍如何在中添加小目标检测层,以提高对小目标的检测能力。原始模型结构如下: 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检测头对应的经过了更多的下采样操作,相比P3/

Limiiiing的博客 351

【3D无序抓取】--终极技术详解

3D无序抓取技术详解:从感知到执行的全流程技术方案 本文系统梳理了3D无序抓取(Bin Picking)的核心技术栈,涵盖3D感知、抓取规划和机器人执行三大环节。在3D感知层,详细介绍了点云采集与预处理方法(PCL/Open3D)、物体分割(PointNet++)和位姿估计(PVN3D/DenseFusion)等关键技术。抓取规划部分重点解析了抓取生成(GraspNet)、质量评估(Dex-Net)和动态避障(MoveIt!)算法。机器人执行环节则涉及路径规划、力控技术和末端执行器选型。同时提供了完整的工具

weixin_45590420的博客 596

C++之我见--delete指针

开篇之前温故一下关于指针的几个小点: 指针本身也是变量,特殊之处在于它是指向一个内存地址的变量 既然是变量,那么它在内存中也有地址 指针p本身地址:&p 指针p指向地址:p 指针p指向地址内值:*p delete指针 指针delete掉之后需要置NULL 甭管为什么,记住总没错。 下面解释下为啥? int *pp = new int; *pp = 1; cout &lt...

我爱我家 3359

58.Sobel边缘检测算子

注:在梯度运算中,很可能会出现负的灰度值,我们不能再采用uint8类型作为像素的数据类型,而是采用了CV_16S或者CV_32F这种有负数范围的类型,运算结果里的负数也不能不处理,否则在显示的时候就会被截断为0,这样就会丢失边界信息。如下图所示,对中心像素Z5求取多个方向的灰度差分,对于Z5的8邻域,分为4个方向,即对角线和水平垂直4个方向对:(z1, z9) ,(z2, z8), (z3, z7), (z6, z4) 给定邻域方向梯度矢量g的幅度为:|g| = <像素灰度差分>/<相邻像素的距离>。

twnkie的博客 4884

cpp基础学习笔记01

平时学习用来记录的,并不是特别完全详细的笔记

weixin_42130300的博客 1169

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C++面向对象编程入门:从过程到对象的思维转变与核心特性解析

面向对象编程(OOP)是一种主流的程序设计范式,其核心思想是通过封装、继承和多态三大特性来组织和管理复杂代码。封装将数据和操作绑定为对象,实现信息隐藏和接口暴露,提升了代码的安全性和模块化。继承机制允许创建层次化的类结构,促进代码复用和逻辑抽象。多态则通过虚函数表实现运行时绑定,使得同一接口能表现出不同行为,极大地增强了程序的扩展性和可维护性。这些特性共同解决了大规模软件开发中的代码组织难题,使得程序更易于理解、维护和扩展。在C++中,面向对象不仅是一种语法,更是一种工程化思维,它融合了C语言的高效控制能力

weixin_30915951的博客 296

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

侯捷-C++面向对象高级开发-下

个人学习笔记

weixin_56148345的博客 353

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C++个人笔记

C++笔记

qq_54046894的博客 799

侯捷-C++面向对象高级开发-上

侯捷老师经典课程《C++ 面向对象高级开发(上)》的个人学习笔记

weixin_56148345的博客 309

C++编程入门:从程序骨架到面向对象的核心概念解析

编程语言的核心在于理解其基础架构与数据流动机制。C++作为一门静态类型语言,其程序执行始于预处理器处理头文件,经由编译器翻译和链接器整合,最终从main函数入口运行。这种编译型语言的设计原理确保了执行效率与硬件控制能力,在系统软件、游戏引擎和高性能计算等领域具有不可替代的技术价值。理解变量与数据类型是管理内存中“容器”与“货物”的基础,而运算符与流程控制则让数据得以运算和决策。进一步地,通过函数实现模块化封装,并运用指针与引用直接操作内存地址,是掌握C++底层能力的关键。面向对象编程通过类与对象实现封装、继

weixin_34186128的博客 406

C++学习

C++基础学习、函数模板、动态内存、新特性、面向对象编程、类的设计以及STL标准模板库的学习

2601_94965056的博客 224

C++关键字深度解析:从基础概念到高级应用实战指南

在C++编程中,关键字是控制程序内存布局、生命周期和并发语义的核心语法元素。理解关键字的底层原理,如`const`的只读语义、`static`对存储期和链接性的影响,以及`volatile`防止编译器过度优化的机制,是编写高效、健壮代码的技术基础。这些概念直接关系到程序的内存管理、性能优化和线程安全,在嵌入式系统、高性能服务器和游戏引擎等应用场景中尤为重要。本文聚焦于`const`、`static`、`mutable`、`volatile`及现代C++新增关键字,通过实际案例剖析常见误用模式,如`stati

cuili5839的博客 397

C++编程进阶:从语法到实战,掌握内存管理与STL核心应用

在编程学习过程中,从掌握基础语法到能够解决实际问题是一个关键跃迁。理解内存管理原理是这一阶段的核心,它涉及指针、引用以及动态内存分配等概念,直接影响程序的性能和稳定性。同时,标准模板库(STL)作为C++的重要组成部分,提供了高效的容器、算法和迭代器,能显著提升开发效率与代码质量。通过项目实战,如通讯录管理系统,开发者可以综合运用结构体、文件I/O和STL容器,将理论知识转化为工程实践能力,从而构建出健壮、可维护的应用程序。

369

C/C++指针深度解析:从内存模型到智能指针实战

指针是C/C++编程中的核心概念,它本质上是存储内存地址的变量,允许程序直接访问和操作内存。理解指针的工作原理,关键在于建立清晰的内存模型:将内存视为带编号的存储单元,变量名关联地址,而指针则存储这些地址。这一机制赋予了程序极高的灵活性与效率,使其能够实现动态数据结构、硬件直接操作及高性能算法。在工程实践中,指针广泛应用于嵌入式系统寄存器映射、链表/树等数据结构实现,以及回调函数等场景。然而,指针也伴随悬空指针、内存泄漏等风险。为此,现代C++引入了智能指针(如unique_ptr、shared_ptr),

weixin_34129696的博客 393

C++运算符陷阱全解析:从优先级到重载的避坑指南

在C++编程中,运算符是构建表达式的基础,其优先级、结合性和隐式类型转换等特性直接影响代码的执行逻辑与安全性。理解运算符的求值顺序和类型提升规则,是避免未定义行为和逻辑错误的关键。例如,位运算符与关系运算符混用时的优先级陷阱,以及自增自减运算符在序列点中的未定义行为,都是实际开发中高频出现的‘坑’。这些原理不仅关系到代码的正确性,也影响程序的性能与可维护性。在系统编程、嵌入式开发和高性能计算等场景中,正确使用运算符能提升代码健壮性。本文聚焦于C++运算符的常见问题,深入剖析优先级、结合性、自增自减的微妙差异

weixin_30628077的博客 354

C++笔记

C++基础知识速查指南,涵盖编译流程、变量作用域、输入输出操作、数组和动态数组(vector)使用、枚举和类型别名、命名空间、指针和引用、静态变量、函数定义与重载、面向对象编程(类/结构体/继承/多态)、虚函数和纯虚函数等核心概念,并提供了智能指针、函数指针、内联函数等进阶用法示例,适合快速回顾C++关键语法特性。

lanshanghu的博客 265

从零实现C++ String类:深入理解RAII、拷贝控制与内存管理

在C++编程中,动态内存管理和资源生命周期控制是核心难点。RAII(资源获取即初始化)原则通过对象的构造与析构自动管理资源(如堆内存),是避免内存泄漏的基石。其具体实现依赖于拷贝控制成员(拷贝/移动构造、赋值运算符及析构函数),它们共同遵循三/五法则,确保对象在复制、赋值时行为正确,资源所有权清晰转移。掌握这些原理对于构建健壮、高效的C++自定义类型至关重要,尤其在实现如字符串、容器等基础数据结构时。本文以亲手实现一个完整的String类为例,系统讲解如何应用RAII与拷贝控制来管理动态字符数组,规避浅拷贝

weixin_30363509的博客 373
上一篇: 识别电路板上的元器件及作用
下一篇: 使用CMake脚本通过pandoc对docx文件转换为html遇到的问题
Code_KY
博客等级 码龄5年 43粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值