SetJmp/LongJmp:为什么会抛出段错误?

2024-01-10

下面的代码总结了我目前遇到的问题。我当前的执行流程如下,我正在 GCC 4.3 中运行。

jmp_buf a_buf;
jmp_buf b_buf;

void b_helper()
{
    printf("entering b_helper");
    if(setjmp(b_buf) == 0)
    {
        printf("longjmping to a_buf");
        longjmp(a_buf, 1);
    }
    printf("returning from b_helper");
    return; //segfaults right here
}
void b()
{
    b_helper();
}
void a()
{
    printf("setjmping a_buf");
    if(setjmp(a_buf) == 0)
    {
        printf("calling b");
        b();
    }
    printf("longjmping to b_buf");
    longjmp(b_buf, 1);
}
int main()
{
    a();
}

上述执行流程在 b_helper 返回后立即创建了一个段错误。几乎就好像只有 b_helper 堆栈帧有效,并且它下面的堆栈被擦除。

谁能解释为什么会发生这种情况?我猜这是一个 GCC 优化,正在删除未使用的堆栈帧或其他东西。

Thanks.


你只能longjmp() back up调用堆栈。致电给longjmp(b_buf, 1)是事情开始出错的地方,因为引用的堆栈帧b_buf之后不再存在longjmp(a_buf).

从文档中longjmp:

在调用 setjmp() 例程的例程返回后,不能再调用 longjmp() 例程。

这包括通过longjmp()脱离函数。

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

SetJmp/LongJmp:为什么会抛出段错误? 的相关文章

  • 为什么存在 async 关键字

    浏览 msdn 9 频道视频时 我发现以下未答复的评论 希望有人能解释一下 我不明白 async 关键字的意义 为什么不直接允许 任何时候方法返回任务时都会使用await关键字 就像迭代器一样 可以在任何返回 IEnumerable 的方法
  • 在 VS2017 下使用 Conan 和 CMake 项目进行依赖管理

    我正在尝试使用 CMake 与 VS2017 集成为 C 设置一个开发环境 以便在 Linux x64 下进行编译 为了更好地管理依赖关系 我选择使用 Conan 但我对这个软件还很陌生 我想知道让 VS2017 识别项目依赖关系的最佳方法
  • 内联函数/方法

    声明 内联函数必须在调用之前定义 这个说法正确吗 EDIT 该问题最初是德语 内联功能穆森 弗 伊赫雷姆 奥夫鲁夫定义 sein 也许它对任何人都有帮助 是的 它是正确的 但只是部分正确 它可能正确地重新构建如下 内联函数必须在每个翻译单位
  • 将字节数组转换为托管结构

    更新 这个问题的答案帮助我编写了开源项目GitHub 上的 AlicanC 现代战争 2 工具 https github com AlicanC AlicanC s Modern Warfare 2 Tool 你可以看到我是如何阅读这些数据
  • System.IO.IOException:由于意外>数据包格式,握手失败?

    有谁知道这意味着什么 System Net WebException 底层连接已关闭 发送时发生意外错误 gt System IO IOException 由于意外 握手失败 数据包格式 在 System Net Security SslS
  • 为什么Apache MPM prefork.c 使用互斥体来保护accept()?

    我坐下来读书Apache 的 MPM prefork c http code metager de source xref apache httpd server mpm prefork prefork c这段代码使用了一个名为accept
  • 选择列表逻辑应位于 ASP.NET MVC、视图、模型或控制器中的什么位置?

    我觉得我的问题与这个问题很接近 但我想对这样的代码应该放在哪里进行更一般的讨论 Asp Net MVC SelectList 重构问题 https stackoverflow com questions 2149855 asp net mv
  • 带 If 的嵌套 For 循环的时间复杂度

    void f int n for int i 1 i lt n i if i int sqrt n 0 for int k 0 k lt pow i 3 k do something 我的思考过程 执行if语句的次数 sum i 1 to
  • HttpWebRequest vs Webclient(特殊场景)

    我知道这个问题之前已经回答过thread https stackoverflow com questions 1694388 webclient vs httpwebrequest httpwebresponse 但我似乎找不到详细信息 在
  • 无法解析远程名称 - webclient

    我面临这个错误 The remote name could not be resolved russgates85 001 site1 smarterasp net 当我请求使用 Web 客户端读取 html 内容时 出现错误 下面是我的代
  • TcpClient 在异步读取期间断开连接

    我有几个关于完成 tcp 连接的问题 客户端使用 Tcp 连接到我的服务器 在接受客户端后listener BeginAcceptTcpClient ConnectionEstabilishedCallback null 我开始阅读netw
  • 如何在 C++ 中将 CString 转换为 double?

    我如何转换CString to a double在 C 中 Unicode 支持也很好 Thanks A CString可以转换为LPCTSTR 这基本上是一个const char const wchar t 在 Unicode 版本中 知
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • 为什么具有相同名称但不同签名的多个继承函数不会被视为重载函数?

    以下代码片段在编译期间产生 对 foo 的调用不明确 错误 我想知道是否有任何方法可以解决此问题而不完全限定对 foo 的调用 include
  • C++11 动态线程池

    最近 我一直在尝试寻找一个用于线程并发任务的库 理想情况下 是一个在线程上调用函数的简单接口 任何时候都有 n 个线程 有些线程比其他线程完成得更快 并且到达的时间不同 首先我尝试了 Rx 它在 C 中非常棒 我还研究了 Blocks 和
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 使用 iTextSharp 5.3.3 和 USB 令牌签署 PDF

    我是 iTextSharp 和 StackOverFlow 的新手 我正在尝试使用外部 USB 令牌在 C 中签署 PDF 我尝试使用从互联网上挖掘的以下代码 Org BouncyCastle X509 X509CertificatePar
  • 使用 HTMLAgilityPack 从节点的子节点中选择所有

    我有以下代码用于获取 html 页面 将网址设置为绝对 然后将链接设置为 rel nofollow 并在新窗口 选项卡中打开 我的问题是关于将属性添加到 a s string url http www mysite com string s

随机推荐

  • 更改 iOS 7 中 UIToolbar 的高度

    我试图在新的 iOS 7 项目中更改 UIToolbar 的高度 但我无法做到 我正在使用 UINavigationController 来管理几个 UIViewController 我尝试通过导航控制器设置工具栏的框架 但遗憾的是 工具栏
  • 如何使用 Selenium Java 2.8 获取当前 DOM?

    我正在使用最新版本的 Selenium 和chromedriver测试 ZK 应用程序 在测试期间 我想转储 DOM 或其中的一部分 以帮助我找到所需的元素 并且可能帮助必须维护测试的人 方法WebDriver getPageSource
  • 查找适用于某个元素的所有 CSS 规则

    许多工具 API 提供了选择特定类或ID 的元素的方法 还可以检查浏览器加载的原始样式表 但是 为了让浏览器呈现元素 它们将编译所有 CSS 规则 可能来自不同的样式表文件 并将其应用到该元素 这就是您在 Firebug 或 WebKit
  • 使用 angular-ui-grid 预选加载行

    我想在页面加载时选择某些行 工作日 这是笨蛋plnkr co edit 48NyxngWNGIlOps1Arew p preview 有什么建议吗 将以下属性添加到您的 scope gridOptions目的 onRegisterApi f
  • 我什么时候应该将 Angular2 App 与 SystemJS 方法相反?

    我什么时候应该连接我的 Angular2 应用程序 什么时候应该保留 SystemJS 原始方法 将不同的模块保留在不同的文件中 主要取决于浏览器的支持 HTTP2 之前的旧方法是将所有内容捆绑到一个大文件中 现在我们已经有了 http2
  • 承诺履行处理程序未定义

    看起来非常基本 基于 Promise 的实现的实现没有返回我期望看到的值 数据 这就是我期望这个界面的工作方式 sdk request options gt Promise Response Object JSON 这是我的模型中的代码 r
  • 将 SDK 工具和 ADT 更新至 17,现在出现VerifyErrors

    我有一个引用两个图书馆项目的项目 升级ADT和SDK工具后版本17 http android developers blogspot com 2012 03 updated sdk tools and adt revision 17 htm
  • gnuplot:在交互模式下设置 link 和 x2tics

    在交互模式下 x2tics 在放大时很快就会消失 这个例子被展示了here https stackoverflow com a 60373156 11769765 set tics nomirror set x2tics set link
  • 双问号,它是如何工作的?

    我正在学习 Swift 作为这个过程的一部分 我试图弄清楚这里到底发生了什么 我有一个自定义 Segue 我想在其中放置模态视图控制器以消除转换 Objective c 中以前的内容是 UIViewController sourceView
  • 如何在iPad屏幕上触摸时获取PDF注释

    我开发了一个使用 CATiled Layer 在 ipad 上显示 PDF 的应用程序 到目前为止 一切都很好 但是有一个问题确实让我剪掉了最后的头发 我有一个带有嵌入注释的 PDF 每个注释都有一个 URL 我可以找到触摸区域的坐标 但问
  • 节点脚本永远不会结束

    我有下面的节点脚本来基本上复制一些文件的内容并将它们插入到 mongo 该脚本似乎永远不会结束 即使所有数据都已成功插入 我总是必须执行 Ctrl C 来终止它 我应该在 node js 中使用什么东西来结束脚本吗 var mongoose
  • Jenkins CI 与 Chef 服务器

    有什么方法可以将 Jenkins 与 Chef Server 集成 以便我可以创建要执行的作业吗 我不想去厨师工作站 我需要在单独的服务器或厨师工作站上安装 jenkins 吗 我可以直接从 Jenkins 控制台执行所有食谱吗 是的 你可
  • 是否有针对开发团队的 Web 服务 (API) 标准或最佳实践?

    如果您要开始为您的 Web 应用程序开发 API 是否有任何类型的指南 最佳实践或标准来构建 Web 服务 我已经看到了有关该主题的一些讨论 我想获得更多信息 至少得到关于从哪里获取信息的指示 提前致谢 关于 网络服务 存在着广泛的多样性和
  • Emberjs 使用 sortProperties 按日期对内容进行排序

    我正在尝试使用 Emberjs排序属性按日期对内容进行排序jsfiddle http jsfiddle net CmtpX 2 我的模型有一个开始时间我尝试排序的属性 但没有成功 然后我创建了一个名为的计算属性今日活动在返回与传入日期匹配的
  • 选择具有不同列名的表

    In SQL Select into 将行复制到不同的 备份 表中 如果备份表具有不同的结构 或不同的列名 这可能吗 如果没有 实现这一目标的最佳方法是什么 这是我想做的 TableA有列a1 a2 a3 我想将此表中的一些行复制到另一个表
  • console.log() 中的反斜杠“\”未出现

    我正在尝试使用反斜杠console log 并在其中 p p 但似乎当页面加载时 所有反斜杠都被删除 示例 JS console log m Lets rock m Result m Lets rock m 我怎样才能防止它被删除 EDIT
  • jQuery切换类如果其他不起作用

    我无法在 if else 条件下使用 jQuerytoggleClass 我的 HTML 代码是 ul li class firstLevel a href main cat 01 MAIN CATEGORY 1 a ul class di
  • 从作业中捕获详细流

    我正在努力成为一名优秀的 powerscript 用户 并根据最佳实践使用 Write Verbose 但我无法从正在运行的作业中获取 Verbose 流 Job Start Job Name Scanning Work Item Scri
  • didFailToRegisterForRemoteNotificationsWithError:用户拒绝错误?

    如果用户拒绝启用推送通知 我们将通过 didFailToRegisterForRemoteNotificationsWithError 收到错误 有谁知道在这种情况下 NSError 对象中的代码是什么 以将其与没有可用连接区分开来 我不认
  • SetJmp/LongJmp:为什么会抛出段错误?

    下面的代码总结了我目前遇到的问题 我当前的执行流程如下 我正在 GCC 4 3 中运行 jmp buf a buf jmp buf b buf void b helper printf entering b helper if setjmp