C++ 中的 malloc/free 和 new/delete 兼容性?

2024-04-17

malloc/free 和 new/delete 有一个很好的比较here https://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free以及 malloc() 和 free() 如何工作的良好解释here https://stackoverflow.com/questions/1119134/how-do-malloc-and-free-work。显然,我们不会混合使用它们——将 free 与 new 一起使用,或者将 delete 与 malloc 一起使用。

我们可以看到很多开源项目,有很多贡献者,使用这两种机制,同时遵守上述“不混合”规则。通常,一个文件中只有一种方式(一位作者,一种偏好)。我已经分叉了这样一个项目,并且我使用 new/delete 添加了一些功能。但我遇到了一些奇怪的记忆损坏。当然,我可能对他们负有责任,但是......

这让我问了一些“天真的”问题:

  1. 我可以在同一个编译单元(*.o)中同时使用 malloc/free 和 new/delete 两种机制吗?当然,要遵守“不混合”规则?

  2. 我可以像这段代码一样交织这两种机制吗?

    int *a = (int *) malloc (1000 * sizeof int);
    
    int *b = new int[1000];
    
    // some code
    
    free a;
    
    delete[] b;
    

是的,您可以交错它们 - 只需使用与分配所用函数匹配的释放函数即可。仅当您使用错误的释放函数时才会出现问题。

请注意,当您有多个库时,这并不容易 - 这些库可能使用不同的堆,因此即使您使用正确命名的函数,它也可能碰巧在错误的模块中实现,因此使用错误的堆,这将导致您陷入未定义状态行为。看这个答案 https://stackoverflow.com/a/19131623/57428为了更好地了解我在这里所说的内容。

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

C++ 中的 malloc/free 和 new/delete 兼容性? 的相关文章

随机推荐

  • 500 内部服务器错误,适用于 php 文件而不是 html [重复]

    这个问题在这里已经有答案了 我的网站只有 4 5 个静态页面 索引 html 索引 php两者都在那里 index html 工作正常 如果我更改为index php 它会给出500 Internal Server Error 我不知道我的
  • Jekyll 的本地邮政资产

    我想知道其他人在使用 Jekyll 时如何组织个人帖子的资源 例如 如果帖子有图像 您是否只需将其转储到共享图像文件夹中 我真的不喜欢这样做的想法 这意味着图像与帖子完全分离 而我认为它们应该配对 我编写了一个插件 让我可以轻松地组织子目录
  • StringBuilder 是否比 String 连接使用更多内存?

    我知道在 C 中使用 StringBuilder 具有明显的性能优势 但是内存差异如何 StringBuilder 使用更多内存吗 顺便说一句 字符串生成器本质上做了什么不同的事情 使其速度如此之快 简短回答 StringBuilder适用
  • c 和 c++ 中将大小数组作为函数参数的目的是什么?

    考虑以下函数 void func1 int unsized array void func2 int sized array 10 void func3 int pointer 根据结果 std cout lt lt std is same
  • 静态方法与非静态方法

    下面是静态方法和非静态方法的php类代码示例 示例1 class A None Static method function foo if isset this echo this is defined echo get class thi
  • ASP.NET GridView:如何编辑和删除数据记录

    嗨 我已经使用 gridview 创建了一个表 有没有办法实现编辑和删除 我以前用PHP做过 我想使用的方法是在表中再创建两列 每行上都有编辑和删除按钮 然后 当单击按钮时 它会通过 URL 传递 id 并能够编辑或删除 不太确定如何在 A
  • 如何使用 Multer 中间件上传图像数组

    我正在尝试使用 Multer 上传一组图像 在客户端 我有一个名为图片的 FormData 图片数组 来自react native image picker const pictures setPictures useState const
  • 将图像添加到 html 块中

    我在 Blocks 内容中添加了一些 html 代码并启用了完整 HTML 过滤器 我对图像使用了相对路径 例如 sites all themes zen zen image png 我想这是不正确的 因为我需要根据我在主页或 node i
  • 使用 Json.NET 将 JSON 转换为数据集

    希望有人可以伸出援手 我正在尝试使用下面的示例将 JSON 转换为数据集 但遇到了问题 我已经验证 JSON 是正确的 使用了 Kent 建议的方法 感谢您的时间和帮助 以下是我的 JSON jsonData item1 one item2
  • Xcode 7 在创建新文件时崩溃

    我有 El Capitan GM 并且我已将 Xcode 更新为 Xcode 7 GM 现在我无法创建新类 Xcode 崩溃并显示消息 UNCAUGHT EXCEPTION NSInvalidArgumentException NSOpen
  • 在nifi中将JSON转换为CSV

    我想在 nifi 中将 JSON 文件转换为 CSV 我们可以用 Python 和其他编程语言来实现这一点 并且有多篇文章介绍它 我有多个 JSON 文件 每个文件都有不同的架构 一个特定文件只有一个架构 我可以看到有一些模板可以将 CSV
  • 项目“ ”的目标位置已存在,无法移动项目

    当我尝试与 git 存储库共享我的项目时 出现这样的异常 项目的目标位置 已存在 无法移动项目 写一个答案是因为我尝试了许多类似问题中建议的许多选项 但没有一个起作用 然后我按照以下有效步骤手动完成了此操作 并且这些步骤适用于任何 Ecli
  • 使用正则表达式查找有效的 IP 地址

    我有以下字符串 text 10 0 0 1 1 but 127 0 0 256 1 1 1 1 我想返回有效的IP地址 所以它应该只返回1 1 1 1自从这里256高于255并且第一个IP编号过多 到目前为止 我有以下内容 但它不适用于0
  • 抽象与抽象类

    根据http www cs cornell edu courses cs211 2006sp Lectures L08 abstraction 08 abstraction html http www cs cornell edu cour
  • 为什么 TableAttribute 位于实体框架 Dll 中?

    Table 属性 可用于将 POCO 类映射到正确的数据库名称 架构 位于 EntityFramework dll 中是否有充分的理由 这是否会阻止您创建一个仅包含您的实体而不依赖于特定数据访问技术的域项目 例如 如果我使用此属性 我不相信
  • CLGeocoder 返回其他国家/地区的位置

    我有以下代码 CLGeocoder geo CLGeocoder alloc init CLRegion region CLRegion alloc initCircularRegionWithCenter CLLocationCoordi
  • 在Sandbox中使用Cocoa NSSavePanel导致断言失败

    我正在尝试使用 NSSavePanel 并将这一行添加到我的代码中 let test NSSavePanel 每次调用此代码时都会出现此错误 我不太确定这里发生了什么 因为我只是创建一个新对象 任何帮助表示赞赏 谢谢 Assertion f
  • 如何在 MVC Core 和 AutoFac 中使用属性注入

    我可以在 MVC Core 中轻松使用构造函数参数注入 但不支持属性注入 我尝试使用 AutoFac 但也失败了 那么如何在MVC Core中使用属性注入 这是 AutoFac 的代码 services AddMvc ContainerBu
  • 使用 Linkify Android 打开 Activity

    我想在用户使用 linkify 单击 textView 时打开 Activity 这是我的代码 Pattern tagMatcher Pattern Compile A Za z0 9 Scheme for Linkify when a w
  • C++ 中的 malloc/free 和 new/delete 兼容性?

    malloc free 和 new delete 有一个很好的比较here https stackoverflow com questions 240212 what is the difference between new delete