delete[] 提供了一个修改后的新指针。未定义的行为?

2023-11-24

我在同行代码评审会议期间看到了如下一些代码:

char *s = new char[3];
*s++ = 'a';
*s++ = 'b';
*s++='\0';
delete []s; // this may or may not crash on some or any day !!

首先,我知道在标准 C++ 中,指向数组大小的前一位是可以的。尽管访问它会导致未定义的行为。所以我相信最后一行*s++='\0'很好。但如果我没记错的话,C++ 标准要求这样做delete应该提供相同的指针new回。

我相信这意味着返回的指针不能被篡改。我想是因为new可能会在返回的地址之前保留一些内务信息delete可能会使用。移动new'd 指针可能会使它无法访问。

它是未定义的行为还是实现定义的或未指定的? 有人可以证实这一点吗?最好通过指向 C++ 标准中的正确位置。

In the freely available draft version of the draft C++ Standard (Draft_SC22-N-4411.pdf) has the details in section 5.3.5. I got it from Bjarne's homepage.


来自 C++ 标准,第 5.3.5/2 节:

删除操作数的值应为指针值 这是由先前的数组产生的 新表达。如果不是,则行为 未定义

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

delete[] 提供了一个修改后的新指针。未定义的行为? 的相关文章

  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 为什么布尔变量的默认值往往为 false? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 据我所知 C VB Jav
  • 如何将 $_SESSION 变量传递到 websocket 服务器?

    我在网上搜索了很多 但没有找到有用的线索 我有一个 websocket 服务器和一个 Web 服务器在我的本地计算机上一起运行 当客户端使用浏览器 API new WebSocket ws localhost 连接到 WebSocket 服
  • 临时文件未找到文件异常

    我正在构建 java 应用程序 Spring JSF PrimeFaces 我将文件上传到服务器 但是 如果我在文件上传结束后立即单击 下一步 按钮 则会收到此错误 Aug 24 2013 8 12 34 PM org apache cat
  • PHP mkdir() 权限

    我有一个 Linux 服务器 使用 apache 作为 Web 服务器 在我的 PHP 脚本中 我正在创建目录0777模式 代码非常简单 如下所示 mkdir path 0777 当我运行此脚本并转到我的服务器文件管理器时 该文件夹就在那里
  • PHP 简单 HTML DOM 解析器在有效 url 上返回 false

    我正在尝试以下操作 url https www tripadvisor es Hotels g187514 Madrid Hotels html ta html file get html url var dump ta html 它返回
  • Dialog 或 DialogFragment 中的 Activity 是否有等效的dispatchTouchEvent()

    我需要拦截应用程序中的所有触摸事件以监视自定义活动超时 目前我使用dispatchTouchEvent 在我的活动中 但如果屏幕上有对话框 则不会调用此函数 有谁知道是否有任何方法可以在存在对话框的情况下拥有相同的功能 Thanks For
  • Javascript - 在新选项卡中打开链接(同一窗口)

    我意识到这个主题已经有几个问题了 但它们似乎都很老了 只是想为此获得最新的答案 打开新选项卡 在同一浏览器窗口内 的标准方式仍然是 window open url blank window focus 另外 我读到它取决于浏览器的用户配置
  • 将 2 个元素数组的 JavaScript 数组转换为对象键值对

    从这样的事情中获得最快的算法是什么 var array 1 a 2 b 3 c 像这样的事情 Object 1 a 2 b 3 c 到目前为止 这就是我想出的 function objectify array var object arra
  • 计算元音

    谁能告诉我这个脚本有什么问题吗 我是一个 python 新手 但我似乎无法弄清楚是什么导致它无法运行 def find vowels sentence gt gt gt find vowels test 1 count 0 vowels a
  • Matlab中有高斯差分函数吗?

    我是图像处理新手 在我的实验中 我在高斯差分方面遇到困难 给了我各种实现 但我不理解它们及其参数 这是我的公式 我应该自己实现这个过滤 还是有为此定义的现有函数 当然 所有参数都类似于链接中的参数 我需要调整参数并生成不同的图像 您可以使用
  • 如何访问 Angular2 中的 HTML 视频元素

    我有一个 HTML5
  • 使用 char 作为主键/外键是否不行?

    考虑有一堆链接到 国家 或 货币 表的表 为了使数据更易于阅读 我想在这两个表中的每个表中使用国家代码 例如美国 GB AU 和货币代码 美元 澳元 创建 CHAR 字段作为主键 并且所有其他表将使用此 CHAR 作为外键 数据库是带有in
  • iPhone - 将 NSString 编码从 WindowsCP1251 转换为 UTF8

    我怎样才能得到这个转换NSWindowsCP1251StringEncoding to UTF 8 我进行了多次尝试 但没有人能达到应有的效果 我最后的尝试是 NSData dt mystr dataUsingEncoding NSUTF8
  • 如何在使用 ParcelJS 构建的 Cypress 测试中使用绝对路径导入?

    我在 Parcel 项目中使用带有绝对路径的导入 但 Cypress 测试并不能同样解析这些绝对路径 模块分辨率差异 Parcel import foo from foo js 相对于项目根目录 Cypress import foo fro
  • Jquery 中的 Ajax.updater 相当于什么?

    请让我知道 Jquery 中以下原型代码的等效内容 var myAjax new Ajax Updater abc billing add bill detail method get parameters pars insertion I
  • tkinter 窗口获取 x、y、几何/坐标,无需窗口顶部

    我在 python 3 中使用 tk 尽管我假设这适用于任何语言 我正在寻找标题栏之外的 tk 窗口的当前 x y 坐标 import tkinter root tkinter Tk 然而 使用root winfo y 给我坐标 包括标题栏
  • 无法使用 jquery/javascript 在 html5 视频中设置 video.currentTime

    无论是从控制台还是从我的标签中 我都无法使用 JavaScript 设置 html5 视频元素的当前时间 我也在使用 jQuery 但我不知道这是否与该问题相关 我在 Ubuntu 上使用 Google Chrome 24 0 1312 5
  • 创建脚本语言

    有人可以指导我创建针对 WSH Windows 脚本主机 的脚本语言的正确方向吗 我用谷歌搜索过它 但与我几个月前最初搜索它时相比 与此相关的链接似乎要少得多 谢谢 该产品现在称为 Windows Script Host MSDN 文档表明
  • 在 (x) 个字符后剪切文本

    这是在 WordPress 中 不确定这有什么区别 这段 php 输出帖子标题 它是简单文本 长度最多可达 100 个字符 我想要的是如果输出的字符超过 20 长以显示 或根本不显示任何内容 Thanks 检查字符串长度后strlen us
  • delete[] 提供了一个修改后的新指针。未定义的行为?

    我在同行代码评审会议期间看到了如下一些代码 char s new char 3 s a s b s 0 delete s this may or may not crash on some or any day 首先 我知道在标准 C 中