alloca 函数崩溃,但 malloc 正常

2024-02-25

请解释一下崩溃的原因。我的第 3 方代码意外崩溃并出现 EXC_BAD_ACCESS

static int overwrite_selector(struct srm_target *srm, MARFileRemoverProgressBlock progressBlock)
{
    srm->buffer = (unsigned char *)alloca(srm->buffer_size);

    if(overwrite_byte(srm, 1, 0xF6, progressBlock) < 0) return -1;
    return 0;
}

static int overwrite_byte(struct srm_target *srm, const int pass, const int byte, MARFileRemoverProgressBlock progressBlock)
{
  memset(srm->buffer, byte, srm->buffer_size);
  return overwrite(srm, pass, progressBlock);
}

崩溃发生在 memset(srm->buffer, byte, srm->buffer_size); 线上因此,srm->buffer 的内存分配似乎存在问题。但如果我将 alloca 替换为 malloc 那么一切都可以(不会崩溃)。

我在启用 ARC 的 osx 10.9 上进行开发

我注意到苹果特有的一点:如果我在全局队列中运行代码,但如果在主队列上运行,则一切正常,就会发生崩溃。


听起来像是堆栈溢出,alloca将从堆栈中分配 http://man7.org/linux/man-pages/man3/alloca.3.html因此,如果您尝试分配太多,将导致堆栈溢出,而 malloc 将从更大的堆中分配。没有办法知道当你用 alloca 溢出堆栈时 https://stackoverflow.com/a/22541090/1708801.

另请注意,自从alloca在堆栈上分配从函数返回该内存将不起作用,因为一旦退出函数该内存将不再可用。因此,如果您需要使用函数外部的内存,则需要使用malloc.

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

alloca 函数崩溃,但 malloc 正常 的相关文章

  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 未找到 Boost 库,但编译正常

    我正在尝试在 C 中使用 boost 的文件系统 使用时看起来编译没问题 c c Analyse c o Analyse o g W Wall L usr local lib lboost filesystem lboost system
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • 即使没有异步,CallContext.LogicalGetData 也会恢复。为什么?

    我注意到CallContext LogicalSetData LogicalGetData不按照我期望的方式工作 内部设置的值async方法得到恢复即使没有异步或任何类型的线程切换 无论如何 这是一个简单的例子 using System u
  • Eclipse 在 Android SDK 内容加载器处挂起

    我已经在 OS X 10 8 2 上使用 Eclipse 4 2 Juno 版本 20120920 0800 几个星期了 为 Android 3 0 及更高版本构建应用程序 我有一台带 SSD 的四核 i7 MacBook Pro 因此性能
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • Python 声音(“铃声”)

    我想让一个 python 程序在完成任务时通过发出嘟嘟声来提醒我 目前 我使用import os然后使用命令行语音程序说 进程完成 我更愿意它是一个简单的 铃 我知道有一个函数可以用于Cocoa apps NSBeep 但我认为这与此没有太
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • 如何使用 linq 从 DataTable 中过滤掉空行?

    我有一个从 Excel 数据构建的数据表 但有时 Excel 返回的行中所有字段都为空 我想一般性地过滤掉这些 而不考虑列名 我认为 Linq 可以很好地做到这一点 但要实现这一点有点困难 到目前为止 这就是我得到的 var nonempt
  • 如何在浏览器中从Go服务器下载文件

    我的代码从远程 url 获取文件并在浏览器中下载文件 func Index w http ResponseWriter r http Request url http upload wikimedia org wikipedia en b
  • iPhone 配置实用程序无法识别 iOS 8 设备

    随着 iOS 8 最近的更新 我无法使用 iPhone 配置实用程序加载我的测试设备 该程序根本无法识别装有 iOS 8 的设备 当 iOS 7 发布时 iPCU 不需要更新 尽管它确实可以与 iOS 7 配合使用 Apple 支持网站上的
  • 批处理文件对多个目录中的所有文件执行命令

    我想制作一个运行此命令的批处理文件 C Program Files x86 IrfanView i view32 exe C Users digi admin TIFFs OLD DIRECTORY tif ini C Users digi
  • Visual Studio:如何中断已处理的异常?

    我希望 Visual Studio 在发生处理的异常时中断 即我不只是想看到 第一次机会 消息 我想调试实际的异常 例如我希望调试器在异常时中断 try System IO File Delete someFilename catch Ex
  • C 中的结构初始化出现错误:预期表达式

    我有一个这样的结构 struct foobar int i char word 我知道这会起作用 struct foobar int i char word struct foobar three 3 three 为什么以下不起作用 str
  • 始终块中的 Veriloggenerate/genvar

    我试图让一个模块通过 ISE 12 4 中的语法检查 但它给了我一个我不明白的错误 首先是代码片段 parameter ROWBITS 4 reg ROWBITS 1 0 temp genvar c generate always pose
  • IntelliJ 社区版中的 Spring Boot 项目

    我是 IntelliJ 社区版的新手 任何人都可以帮助我在 IntelliJ 社区版中创建 Spring Boot 项目 对于终极版 有 spring boot 初始化程序 但我找不到社区版的任何内容 我点击了此链接但找不到任何解决方案 使
  • 编辑元素时 Java 优先级队列重新排序

    我正在尝试实现 Dijkstra 算法 以使用优先级队列查找最短路径 在算法的每一步中 我都会从优先级队列中删除距离最短的顶点 然后更新优先级队列中其每个邻居的距离 现在我读到 当您编辑 Java 中的优先级队列中的元素 确定排序的元素 时
  • 如何将变量限制为一组固定的字符串?

    如果我想将数据库中的spicelevel列的值限制为1 2和3 我可以这样做 private enum SpiceLevel Low 1 Medium 2 Hot 3 然后在代码中我可以做 int SpiceLevel Low选择 1 作为
  • Visual Studio 2010 DataCompare 表比较

    在 Visual Studio 2010 中 您是否能够比较两个数据库之间的数据库数据 我想用它来将数据从一个数据库复制到另一个数据库 这些数据库具有完全相同的结构 但是当我进行比较时 我看到 VS2010 的 DataCompare 视图
  • 为什么静态库包含 main 函数?

    我遇到了一个奇怪的静态库 其中包含main 函数 C 我只是想知道它的目的是什么 如何main 执行 从链接器的角度来看 链接在哪里并不重要main功能是 它可以位于静态库中 也可以位于独立的目标文件中 链接器不在乎 它从目标文件生成可执行
  • 如何在 CSS 中定义 tbody 的最小高度

    我想在CSS中设置tbody的最小高度 即使没有 tr td td tr 在 tbody 中 这是我的代码 tbody height 500px min height 500px 但它不起作用 那么我应该怎么做才能实现这一目标呢 你为什么要
  • 沮丧:为什么:“A”是“B”无法访问的基础?

    与此错误消息的其他示例不同 我已经有一个指向A并想要检索实际的子类 这种安排是一些 C 包装的 C 代码的一部分A是一些 POD C 结构 为什么没有动态转换 和test是 C 中的一些回调 它调用 C 功能并检索正确的对象 应使用强制转换
  • 常规语言的抽引理

    我在使用泵引理检查给定语言是否规则时有点困惑 假设我们必须检查是否 L 接受偶数的语言0是否正常 我们知道它是正则的 因为我们可以为 L 构造一个 DFA 但我想用泵引理来证明这一点 现在假设我拿一个字符串w 0000 现在将字符串划分为x
  • 无法使用 Maven 从 .avsc 编译和创建 .avro 文件

    我是 Maven 新手 一直在查看教程和网络以获取有关如何从架构文件 avsc 构建 avro 的文档 基于 apache maven org 站点上的文档 我必须添加以下内容
  • 如何在C# TBB(C#代码片段)中添加用户定义的方法?

    我正在创建一个 C TBB C 代码片段 为此 我需要编写一个用户定义的方法 我尝试使用 如何在代码中访问用户定义的方法 提前致谢 请建议我一种解决此问题的方法 TOM NET API 参考提供了以下示例 log Debug Executi
  • Tensorflow/models 使用 COCO 90 类 ID,尽管 COCO 只有 80 个类别

    Tensorflows object detection 项目的标签图包含 90 个类别 尽管 COCO 只有 80 个类别 因此参数num classes在所有示例配置中设置为 90 如果我现在下载并使用COCO 2017数据集 我需要将
  • bash 中类似 zsh 的历史记录

    我真的很喜欢 zsh 的历史记录自动完成功能 也就是说 当我按下时 我会收到上一个命令 当我打字时emacs然后按向上键 我得到了我使用的最后一个 emacs 命令 当我打字时git然后按向上键 我得到了我使用的最后一个 git 命令 当我
  • alloca 函数崩溃,但 malloc 正常

    请解释一下崩溃的原因 我的第 3 方代码意外崩溃并出现 EXC BAD ACCESS static int overwrite selector struct srm target srm MARFileRemoverProgressBlo