weixin_40639596 2020-01-23 16:56 采纳率: 0%
浏览 291
已结题

setjmp/longjmp相同的代码在linux,windows下表现不一样。

setjmp/longjmp相同的代码在linux,windows下表现不一样。

代码

#include <csetjmp>
#include <iostream>
using namespace std;

jmp_buf jb1;
jmp_buf jb2;

auto bar() {
  if (setjmp(jb2) == 0) {
    longjmp(jb1, 1);
  } else {
    longjmp(jb1, 2);
  }
}

void foo() {
  bar();
}

void testjmp() {
  auto i = setjmp(jb1);
  if (i == 0) {
    foo();
  } else {
    cout << "i = " << i << endl;
  }

  i = setjmp(jb1);
  if (i == 0) {
    longjmp(jb2, -1);
  } else {
    cout << "i = " << i << endl;
  }
}

int main() {
  testjmp();
  return 0;
}

Windows 表现

图片说明

linux表现

图片说明

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-01-23 22:19
    关注

    进入汇编模式调试下,估计是堆栈增长方向或者vc++有额外的esp寄存器值保护

    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置