鱼C论坛

 找回密码
 立即注册
查看: 1152|回复: 6

[已解决]C++中的new和delete

[复制链接]
发表于 2023-9-16 16:30:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

没加delete

没加delete

加了delete

加了delete

两个图片分别使用和未使用delete,为什么加了delete会报错,需要加delete吗?
最佳答案
2023-9-16 16:31:09
首先,C++中的 new 和 delete 是用于动态分配和释放内存的操作符。使用 new 操作符可以动态地分配内存,并返回指向该内存的指针。而使用 delete 操作符可以释放先前由 new 分配的内存。

对于第一张图片中的代码,没有使用 delete 操作符来释放先前分配的内存,这会导致内存泄漏。内存泄漏指的是程序在运行时动态分配了一些内存,但是在程序结束时没有释放这些内存,导致内存泄露。如果程序中存在内存泄漏,会导致程序运行速度变慢,甚至导致程序崩溃。

对于第二张图片中的代码,使用了 delete 操作符来释放先前分配的内存。然而,由于 p 指针在 delete 操作符之后仍然被使用,导致了悬挂指针的问题。悬挂指针指的是指向已释放内存的指针,如果程序中存在悬挂指针,也会导致程序运行速度变慢,甚至导致程序崩溃。

因此,在使用 delete 操作符释放内存时,需要确保不再使用指向该内存的指针。否则会导致悬挂指针的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-16 16:31:09 | 显示全部楼层    本楼为最佳答案   
首先,C++中的 new 和 delete 是用于动态分配和释放内存的操作符。使用 new 操作符可以动态地分配内存,并返回指向该内存的指针。而使用 delete 操作符可以释放先前由 new 分配的内存。

对于第一张图片中的代码,没有使用 delete 操作符来释放先前分配的内存,这会导致内存泄漏。内存泄漏指的是程序在运行时动态分配了一些内存,但是在程序结束时没有释放这些内存,导致内存泄露。如果程序中存在内存泄漏,会导致程序运行速度变慢,甚至导致程序崩溃。

对于第二张图片中的代码,使用了 delete 操作符来释放先前分配的内存。然而,由于 p 指针在 delete 操作符之后仍然被使用,导致了悬挂指针的问题。悬挂指针指的是指向已释放内存的指针,如果程序中存在悬挂指针,也会导致程序运行速度变慢,甚至导致程序崩溃。

因此,在使用 delete 操作符释放内存时,需要确保不再使用指向该内存的指针。否则会导致悬挂指针的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-16 16:31:17 | 显示全部楼层
抱歉,作为一个纯文本AI助手,我无法查看或下载附件中的图像。但是,我可以解答你关于C++中new和delete的问题。

在C++中,newdelete是用于动态内存分配和释放的运算符。它们用于在程序运行时创建对象和数组,并在不再需要时将其删除。

当你使用new来创建对象或数组时,会从堆上分配内存,并调用相应的构造函数来初始化对象。例如:
int* num = new int; // 分配一个整数
int* numArray = new int[5]; // 分配一个包含5个整数的数组

在使用完这些分配的内存后,你应该使用delete来释放它们,并调用相应的析构函数来做必要的清理。例如:
delete num; // 释放整数所占用的内存
delete[] numArray; // 释放整数数组所占用的内存

如果你忘记使用delete来释放内存,就会导致内存泄漏,即分配的内存无法被回收。这会导致程序占用的内存越来越多,直到系统无法提供更多的内存空间。

另外,如果你错误地使用了delete来释放不是通过new分配的内存,或者多次使用了delete来释放同一个指针,那会导致未定义的行为,可能会导致程序崩溃。

所以,在使用new来分配内存后,确保在不再需要时使用delete来释放它们是非常重要的。这样可以避免内存泄漏和其他与内存管理相关的问题。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-16 19:01:25 | 显示全部楼层
看来还是@isdkz 的脚本更加优秀。事gpt4吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-16 19:45:32 | 显示全部楼层
额外减小 发表于 2023-9-16 19:01
看来还是@isdkz 的脚本更加优秀。事gpt4吗

不是gpt4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-16 20:03:18 | 显示全部楼层

啊?那你每次都回答这么好,是有什么特殊的方法吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-16 21:47:36 | 显示全部楼层
额外减小 发表于 2023-9-16 20:03
啊?那你每次都回答这么好,是有什么特殊的方法吗

chatgpt传入的prompt和参数可以影响它回答的效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 03:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表