gpt4 book ai didi

c++ - 将 jmp_buf 声明为指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:00:29 25 4
gpt4 key购买 nike

我试图将 jmp_buf 定义为指针并在嵌套的 longjmp(s) 中使用它。如下所示:

 ...
jmp_buf *bfj;
...

然后写 if else:

if( setjmp(*bfj) == 0){
DS[SP-2].int_val=(int)bfj;;
//to store the bfj
}else {}

和其他地方使用存储的 bfj 到 longjmp

 bfj = (jmp_buf *)DS[TOP].int_val;
longjmp(*bfj,1);

DS[TOP].int_val 是我存储它的地方。看起来很清楚,我想做嵌套的 gotos 并使用存储的 bfj 返回。但是当我尝试调试时,我得到了“unhandeled exception”。我从一开始就明白了:

if( setjmp(*bfj) == 0)

如果有人能告诉解决方案,我将很高兴。

最佳答案

从你的代码来看,你实际上并没有为你的 jmp_buf 分配内存.您可以做几件事:

  1. 动态分配您的 jmp_bufnew你会想要 delete当你完成它时它
  2. jmp_buf在堆栈上 jmp_buf bfj;当你想要它的指针时,你会用 &bfj 来获取它的地址.

所以,#1 看起来像:

jmp_buf *bfj = new jmp_buf;
...

if( setjmp(*bfj) == 0){
DS[SP-2].int_val=(intptr_t)bfj;

而#2 看起来像:

jmp_buf bfj;
...

if( setjmp(bfj) == 0){
DS[SP-2].int_val=(intptr_t)&bfj;

另一个潜在的问题是你永远不应该将指针转换为 int。因为指针可能比 int 占用更多的内存(这发生在常见的 64 位编程模型上)。如果你不能直接存储指针,你应该使用intptr_t相反。

关于c++ - 将 jmp_buf 声明为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3089047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com