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 兼容性? 的相关文章

  • 使用 CLion 进行 OpenCV Windows 设置

    我想在 Windows 上为 CLion IDE 设置 OpenCV 我尝试使用 OpenCV 3 1 和 2 4 得到相同的结果 我有 Windows 10 64 位 CLion 使用 cygwin 环境 到目前为止我做了什么 1 从Op
  • 在 OnModelCreating 期间设置列名称

    Issue 我目前正在尝试通过设置的属性为我的表及其列添加前缀 我正在使用实体框架核心 我已经正确地为表名添加了前缀 但我似乎无法弄清楚列的前缀 我有一种感觉 我需要使用反射 我已经留下了我的 可能很糟糕的 反思尝试 有人有办法在实体中设置
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • C# 开源 NMEA 解析器 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 C 开源 NMEA 解析器 嗯 我自己也不熟悉 但是一些快速搜索显示了一个代码项目 htt
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • 在 asp.net MVC 中使用活动目录进行身份验证

    我想使用活动目录对我的 asp net mvc 项目中的用户进行身份验证 在网上冲浪了几个小时后 我没有找到任何对我有用的东西 我已经看到了所有结果 但什么也没有 我尝试按照许多帖子的建议编辑我的 web config 如果有人可以帮助我提
  • 搜索实体的所有字段

    我正在尝试在客户数据库上实现 多功能框 类型的搜索 其中单个查询应尝试匹配客户的任何属性 这是一些示例数据来说明我想要实现的目标 FirstName LastName PhoneNumber ZipCode Mary Jane 12345
  • 从BackgroundWorker线程更新图像UI属性

    在我正在编写的 WPF 应用程序中 我有一个 TransformedBitmap 属性 该属性绑定到 UI 上的 Image 对象 每当我更改此属性时 图像就会更新 因此显示在屏幕上的图像也会更新 为了防止在检索下一张图像时 UI 冻结或变
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • LINQ 中的“from..where”或“FirstOrDefault”

    传统上 当我尝试从数据库中获取用户的数据时 我使用了以下方法 在某种程度上 DbUsers curUser context DbUsers FirstOrDefault x gt x u LoginName id string name c
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • INotifyPropertyChanged 和 propertyName

    我一直不确定它的含义propertyName实施时INotifyPropertyChanged 所以一般来说你实现INotifyPropertyChanged as public class Data INotifyPropertyChan
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne
  • 结构化绑定的用例有哪些?

    C 17 标准引入了新的结构化绑定 http en cppreference com w cpp language structured binding功能 最初是proposed http www open std org jtc1 sc

随机推荐

  • 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