当尝试释放堆管理器分配的内存时会发生什么,而堆管理器分配的内存超出了要求的内存?

2024-01-13

这个问题是在一次采访中问我的。

假设 char *p=malloc(n) 分配了 n 个以上的内存,即分配了 N 个字节的内存,并且使用 free(p) 来释放分配给 p 的内存。

堆管理器可以执行这种错误的分配吗? 现在会发生什么,是释放 n 个字节还是释放 N 个字节?

有没有什么方法可以知道释放了多少内存?

EDIT

有没有什么方法可以知道释放了多少内存?

有总比没有好,

正如“Fred Larson”所指出的,mallinfo() 可以提供一些启示


是的,这就是几乎每次你做的时候都会发生的事情malloc(). The malloc块头包含有关块大小的信息,以及何时free()被调用时,它将该金额返回到堆。它没有故障,它是预期的操作。

例如,一个简单的实现可能只将块的大小存储在返回指针之前的空间中。然后,free()看起来像这样:

void free(void *ptr)
{
    size_t *size = (size_t *)ptr - 1;

    return_to_heap(ptr, *size);
}

Where return_to_heap()此处用于表示执行将指定内存块返回到堆以供将来使用的实际工作的函数。

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

当尝试释放堆管理器分配的内存时会发生什么,而堆管理器分配的内存超出了要求的内存? 的相关文章

  • 检测到 NuGet 包的版本冲突

    我正在开发 ASP Net core 2 1 Web 应用程序项目 我的解决方案中有 1 个项目和 3 个其他库 它是高级架构 数据访问层 DAL 业务层 BL 公共层 CL 所以我需要添加引用来连接一些库和项目 我已经添加了CL参考我的项
  • GCC C++ (ARM) 和指向结构体字段的 const 指针

    假设有一个简单的测试代码 typedef struct int first int second int third type t define ADDRESS 0x12345678 define REGISTER type t ADDRE
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • 是否有与 C++11 emplace/emplace_back 函数类似的 C# 函数?

    从 C 11 开始 可以写类似的东西 include
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12

随机推荐

  • HJ38 题解 | #球落地5次经历的路程和第5次反弹高度#

    淘宝 产品运营一面 一个博士的悲催秋招之路 能动热设计求职分享 双胞胎集团校招流程 已OC 天津就业求职好公司及薪资汇总 2022届毕业生现状 29856 22毕业到现在还没找到工作 焦虑死了 请大佬们给指点指点 百度补录timeline
  • 【无标题】SMT贴片加工过程中需要注意的事项

    1 SMT贴片加工 技术员在产线上应佩戴好检验OK的防静电手环 金属片紧贴手腕并保持良好双手交替作业 插件前检查每个订单的电子元器件无错 混料 破损 变形 划伤等不良现象 2 电路板插件需要提前把电子物料准备好 注意电容极性方向须确认无误
  • 地平线招聘!车端SLAM、众包建图、众包地图感知等岗位

    点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 gt gt 点击进入 自动驾驶之心 求职交流 技术交流群 地平线公司介绍 地平线是一家成立于2015年的高科技公司 以 赋能机器 让人类生活更安全 更美好 为使命 地平
  • VMware 最新版 - 虚拟机安装、激活、Centos安装、XShell 连接虚拟机、网络配置(全流程)

    目录 一 VMware 从安装到使用全流程 1 1 安装和激活 1 2 下载 Centos 镜像 以 7 为例 1 3 创建虚拟机 1 4 网络配置 1 5 验证网络是否可用 一 VMware 从安装到使用全流程 1 1 安装和激活 a 从
  • 软件测试/测试开发/全日制/测试管理丨Python深拷贝与浅拷贝

    深拷贝和浅拷贝是两种不同的拷贝方式 它们在处理可变对象 如列表 字典 时有着不同的行为 以下是深拷贝和浅拷贝的主要区别 1 浅拷贝 Shallow Copy 创建方式 浅拷贝通过复制原始对象 创建一个新对象 但对于原始对象中的可变对象 如列
  • Java访问新浪财经交易数据遇到403错误的解决

    http hq sinajs cn list hf XAU list后面写产品编号 例如现货黄金XAUUSD等 外汇编号等 直接放浏览器上访问会出现403错误 需要在访问的时候在header里加referer URLConnection s
  • 信号浪涌保护器的原理和行业应用方案

    信号浪涌保护器 Surge Protective Device 简称SPD 是一种用于限制信号线路中瞬态过电压和分泄浪涌电流的防雷装置 主要用于保护各类信号线路及设备的防雷安全 信号浪涌保护器的原理是利用气体放电管 压敏电阻 齐纳二极管等非
  • contentEditable 不会将第一行换行到标签中

    我有一个带有 contentEditable 属性集的 div 我遇到的问题是我输入的第一行没有包含在标签中 但后续行却包含在标签中 所以输入 qwerty zxcv asdfg 结果是 div class editable qwerty
  • 任何向量的专用模板

    我有一个模板方法 有两个专门的类型版本bool and vector
  • 通过索引访问可变参数模板中的类型

    我想通过索引获取可变参数模板中的类型 索引被指定为模板参数 我设法找到了一个有效的 黑客 但我相信它不符合可变参数模板编程的精神 此外 它还使用额外的内存 这是带有一些解释的代码 template
  • https 非 www 到 https www

    我将所有非 www 请求重写为 www RewriteCond HTTP HOST www mydomain de RewriteRule http www mydomain de 1 L R 301 但 这不适用于 https 所以我也希
  • HTML5:Iframe 没有滚动?

    当涉及到 HTML5 时 不再支持滚动属性 但我仍然需要删除滚动条 如何做到这一点 在 HTML5 中没有滚动属性 因为 它的功能由 CSS 更好地处理 参见http www w3 org TR html5 diff http www w3
  • Pandas 沿着多索引和单独索引进行切片

    我已经开始将 Pandas 用于一些大型数据集 并且大多数情况下它的效果都很好 不过 我对指数有一些疑问 我有一个具有三个级别的 MultiIndex 比如说 a b c 如何沿索引 a 进行切片 我只想要 a 5 7 10 13 的值 执
  • Android 地图 api-2 禁用点击

    我正在将我的一个应用程序迁移到 Android 地图 V2 我在地图上显示一个标记 并且不想将触摸事件发送到地图来更改位置 缩放级别等 在早期版本中 我可以通过设置禁用触摸android clickable false in the Map
  • 合并到具有不同列尺寸的 numpy 数组

    对于机器学习任务 我正在寻找一种方法来合并两个具有不同维度的特征矩阵 以便我可以将它们都提供给估计器 我无法使用 scipy 合并方法 因为这些方法需要兼容的形状 我可以使用 numpy 合并方法 但是当我实际尝试拆分数组进行交叉验证时 会
  • Kendo Template 复选框未触发单击事件

    我使用的 Kendo 模板如下 Scripts Module Analysis CreateMaintainAnalysis js gt
  • 如何使用 MockWebServer Android 测试用例模拟两个 API

    我正在执行仪器测试 因为我正在调用其中一个活动 该活动在创建活动时调用 2 个 API 现在我想为此活动编写仪器测试用例 我必须使用以下命令来模拟 API 响应模拟Web服务器莫基托 当我调用一个 API 时 我的模拟代码工作正常 但当同时
  • Visual Studio Code 禁用自动引用

    如何禁用自动引号功能 当我按下 或 键时 我永远不希望它在任何地方自动插入另一个 无论他们做得多么聪明 它对我来说都是 不可预测的 并分散了我对我正在尝试做的事情的注意力 做 我的打字速度超过 100 WPM 我真的不需要帮助敲击 或 键
  • WiX - 尝试使用 util:PermissionEx 设置服务的权限并收到错误 1

    问题WiX 安装 Windows 服务并授予权限 https stackoverflow com q 2381219 466321这正是我想做的 首先我添加了UtilExtension像这样的命名空间
  • 当尝试释放堆管理器分配的内存时会发生什么,而堆管理器分配的内存超出了要求的内存?

    这个问题是在一次采访中问我的 假设 char p malloc n 分配了 n 个以上的内存 即分配了 N 个字节的内存 并且使用 free p 来释放分配给 p 的内存 堆管理器可以执行这种错误的分配吗 现在会发生什么 是释放 n 个字节