删除从另一个指针分配的指针,我应该再次删除另一个指针吗?

2024-03-17

所以,这是我的例子来解释这个问题

void * p1;
int * p2, * p3;

p2 = new int;
p1 = p2;
p3 = (int *) p1;

要释放内存,以下 3 行是否彼此等效?

delete p2;
delete p3;
delete (int *) p1;

我使用这样的原因是我想在函数之间传递指针而不知道其类型,例如我定义一个 void 指针并通过调用其他函数来更改其值,如下所示:

void * p1;
func1(p1); //in this function, p2 = new int and  p1 is assigned as p1 = p2;
func2(p1); //in this function, p1 is assigned to another pointer: int * p3 = (int *)p1;

然后,我调用 func3 来释放内存

func3(p1); //delete int * p1

调用func3后,我还需要在func1中处理p2吗?

thanks!


是的,全部 3 个deletes 是等价的。值得注意的是,在发布的示例中,所有 3 个指针都指向同一对象。这意味着如果您delete其中之一,你不应该delete其他的因为它们指向的内存已经被释放了。

如果你尝试delete已经发布的东西,你会唤起未定义的行为。如果幸运的话,你的程序会崩溃,但任何事情都有可能发生。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除从另一个指针分配的指针,我应该再次删除另一个指针吗? 的相关文章

  • 金特 + XNA (C#)

    是否可以使用jint http jint codeplex com操作使用 XNA C 创建的 3D 环境 并向该环境添加功能 再次使用 jint 作为 Jint 的贡献者 我会推荐你Jint http jint codeplex com
  • 如果 JSON.NET 中的值为 null 或空格,则防止序列化

    我有一个对象需要以这样的方式序列化 即 null 和 空白 空或只是空格 值都不会序列化 我不控制对象本身 因此无法设置属性 但我知道所有属性都是字符串 环境NullValueHandling显然 忽略 只能让我找到解决方案的一部分 它 似
  • C# 处理标准输入

    我目前正在尝试通过命令行断开与网络文件夹的连接 并使用以下代码 System Diagnostics Process process2 new System Diagnostics Process System Diagnostics Pr
  • C 中“complex”的默认类型

    根据我读过的文档 C99 和更高版本的支持float complex double complex and long double complex作为复杂类型 但是 此代码在使用时编译时不会发出警告gcc Wall Wextra inclu
  • 为什么需要数字后缀?

    C 语言 我确信还有其他语言 需要在数字文字末尾添加后缀 这些后缀指示文字的类型 例如 5m是一个小数 5f是一个浮点数 我的问题是 这些后缀真的有必要吗 或者是否可以从上下文中推断出文字的类型 例如 代码decimal d 5 0应该推断
  • C# 编译器数字文字

    有谁知道 C 编译器数字文字修饰符的完整列表 默认情况下 声明 0 使其成为 Int32 声明 0 0 使其成为 Double 我可以在末尾使用文字修饰符 f 来确保某些内容被视为 Single 例如像这样 var x 0 x is Int
  • 在 C++11 中移出 stdpriority_queue 的元素

    最小的工作示例 include
  • 如何使用 Roslyn 通过扩展方法、静态类中的方法以及带有 ref/out 参数的方法来访问调用

    我正在致力于创建一个开源项目 用于创建 NET UML 序列图 该项目利用名为 js sequence diagrams 的 javascript 库 我不确定 Roslyn 是适合这项工作的工具 但我想我应该尝试一下 所以我整理了一些概念
  • 如何在win32中使用GetSaveFileName保存文件?

    我编写此代码是为了获取 fileName 来保存我的文件 include stdafx h include
  • 用于连接 DataTable 上的动态列的动态 LINQ

    我目前遇到的情况不确定如何继续 我有两个从数据库填充的数据表 我还有一个可用的列名称列表 可用于将这两个数据表连接在一起 我希望编写一组 LINQ 查询 这些查询将 显示两个数据表中的行 内部联接 用于从一个数据表更新另一个数据表 显示一个
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • 如何在 C# 中获取 Json 数组?

    我有一个像这样的 Json 字符串 我想将它加载到 C 数组中 当我尝试这样做时 我收到异常 我的字符串 customerInformation customerId 123 CustomerName Age 39 Gender Male
  • 使用 OleDbCommandBuilder 时访问 SQL 语法错误

    我要在 C 中使用 OleDbDataAdapter 在 Access 数据库中插入数据 但收到错误消息INSERT INTO 命令中的语法错误 BackgroundWorker worker new BackgroundWorker Ol
  • 如何使用 CSI.exe 脚本参数

    当你运行csi exe 安装了 Visual Studio 2015 update 2 您将得到以下语法 Microsoft R Visual C Interactive Compiler version 1 2 0 51106 Copyr
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • 如何在dll级别读取app.config? [复制]

    这个问题在这里已经有答案了 我在一个解决方案中有一个控制台应用程序项目和库项目 dll The 图书馆项目有 app config 文件 我在其中存储我在库中使用的一些键值对 控制台应用程序引用此 dll 我有另一个 app config
  • Autoconf 问题:“错误:C 编译器无法创建可执行文件”

    我正在尝试使用 GNU 自动工具构建一个用 C 编写的程序 但显然我设置错误 因为当configure运行 它吐出 configure error C compiler cannot create executables 如果我看进去con
  • C 语言中的 Alpha 混合 2 RGBA 颜色[重复]

    这个问题在这里已经有答案了 可能的重复 如何快速进行阿尔法混合 https stackoverflow com questions 1102692 how to do alpha blend fast 对 2 个 RGBA 整数 颜色进行
  • Linq.Select() 中的嵌套表达式方法调用

    I use Select i gt new T 每次手动点击数据库后将我的实体对象转换为 DTO 对象 以下是一些示例实体和 DTOS 用户实体 public partial class User public int Id get set
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost

随机推荐

  • 定期轮询 Go 中的 REST 端点

    我正在尝试编写一个 Go 应用程序 定期轮询 PHP 应用程序公开的 REST 端点 Go 轮询应用程序将有效负载读取到结构中并进行进一步处理 我正在寻找一些关于开始实施的建议 最简单的方法是使用 Ticker ticker time Ne
  • d3js 在饼图周围重新分布标签

    我正在使用 d3 js 创建一个外部带有标签的圆环图 我使用基于饼图每片质心的三角函数来定位标签 g append g attr class percentage append text attr transform function d
  • 持久 Akka 邮箱和无损

    在 Akka 中 当一个 actor 在处理消息时死亡 内部onReceive 该消息丢失 有没有办法保证无损 有没有办法配置 Akka 始终保留消息before将他们发送到onReceive 以便在演员死亡时可以恢复并重播 也许像持久邮箱
  • 我应该如何在 Angular 模块中包含模型类?

    我有几个类 我想成为一个普通的 bean DTO 类 它们不显示 component 类 它们不是 Pipe 类 也不应该是 Directive 至少我认为不应该 是 我希望能够将它们捆绑到一个模块中 它们将在其他模块中使用 但尽管有几个咒
  • scala string.split 不起作用

    以下是我的 REPL 输出 我不确定为什么 string split 在这里不起作用 val s Pedro groceries apple 1 42 s java lang String Pedro groceries apple 1 4
  • 根据用户输入更改 AppID 和 AppName

    我想在同一系统上多次安装同一应用程序 例如两个用户使用两个不同的 Web 服务 每个都有自己的 在我的设置脚本中我想更改AppID and AppName基于用户的输入 例如我的默认值AppName Service App 应该改为AppN
  • 如何使用Vault在Ansible v2中运行playbook api

    这是我所拥有的 我知道这无需加密即可运行 并且我可以运行 ansible vault 编辑 common yml with ANSIBLE VAULT PASSWORD FILE vault pass txt 在环境中设置 from col
  • Gerrit 可以在 Gitlab 之前工作吗?还是打算取代它

    我认为我并没有真正理解 Gerrit 如何融入我团队现有的工作流程 Gerrit 是否打算成为代码的中心 枢纽 我一直把它想象成类似于 Atlassian 的 Crucible 它适合 Atlassian 的 Stash 或 Bitbuck
  • C# 反应式扩展 当 OnNext 花费很长时间并且可观察到产生新事件时会发生什么

    我是 Rx 新手 我在想当 IObservable 非常快地产生大量事件而 OnNext 需要很长时间时会发生什么 我猜想新事件会在内部以某种方式排队 这样我就可以运行我们的内存 我对吗 考虑下面的小例子 Subject
  • 如何对 json 数组值进行排序?

    我想将此 json 转换为按日期排序的 html 表 基本上我的 JSON 数据看起来像这样 这里我要recurrence列出日期 var frequencyList project abc recurrenceList 2021 09 1
  • IBrokers reqMktData,如何在回调函数中添加超时?

    我一直在使用来自 IBrokers 软件包的修改后的快照功能来从 IB 获取 最后 价格 并且它对于流动性股票非常有效 我打的电话是例如 reqMktData tws twsSTK AAPL eventWrapper eWrapper da
  • Ansible/Jinja2 - 映射列表中的嵌套键

    当映射嵌套变量列表中的属性时 我无法检索其键 我想从下面检索 tls cert file 的密钥强调文字变量 vault config listener tcp address 0 0 0 0 8200 tls cert file etc
  • JS 线性变换和矩阵乘法失败

    我正在学习线性代数并尝试制作一个具有基本线性变换的小程序 旋转 缩放 平移 这是完整的工作示例 我编写了用于为每个变换生成每个矩阵的函数以及用于计算它们的函数 矩阵与点相乘 矩阵相乘 export const multiplyMatrixW
  • 当我为rabbitmq-management创建用户时,发生了错误

    当我为rabbitmq创建用户时 root localhost rabbitmqctl add user admin admin 发生错误 消息 Creating user admin Error undef crypto hash sha
  • Yocto 构建上的 JAVA 安装错误

    我在 Poky Linux 系统上安装 Java 时遇到了很多麻烦 我正在使用 Yocto 构建我的系统 配置如下 本地配置文件 MACHINE intel corei7 64 DISTRO poky PACKAGE CLASSES pac
  • emberjs 文档就绪函数应该放在哪里?

    我正在尝试附加一个预先输入 https github com twitter typeahead js 到我的模板之一中的文本输入 因为 Ember 使用把手 所以 jQuery 的文档就绪函数不是用于预输入定义的地方 放置 模板就绪 代码
  • vim + iterm:如何使用鼠标执行除选择之外的所有操作?

    好的 有一个非常具体的设置问题 我使用的是 Mac OS X iTerm 和 vim 我真的很喜欢使用鼠标在正常模式下单击选项卡 在正常模式下滚动等 例如 我鼠标已经可以工作了在 iTerm vim 中 但是 我不喜欢使用视觉模式进行选择
  • 在构建期间将 Visual Studio 项目文件复制到输出目录

    当我生成 Visual Studio 项目时 可执行文件将写入项目属性页中指定的输出目录 我有一个包含一些额外文件的项目 例如 ini文件 由程序使用 如何配置项目以将文件复制到输出目录 以便当程序运行时 它的 CWD 中有另一个文件的副本
  • 优化 Node.js 内存消耗

    我正在用 Node js Express 和 MongoDB 编写一个简单的 cms 我计划为每个站点运行不同的 Node js 进程 问题是启动后该进程需要大约 90m 的 RAM 对我来说太大了 8 个站点占用了所有服务器 RAM 该内
  • 删除从另一个指针分配的指针,我应该再次删除另一个指针吗?

    所以 这是我的例子来解释这个问题 void p1 int p2 p3 p2 new int p1 p2 p3 int p1 要释放内存 以下 3 行是否彼此等效 delete p2 delete p3 delete int p1 我使用这样