我尝试将jmp_buf定义为指针,并在嵌套的longjmp_ in .as中使用它,如下所示:
...
jmp_buf *bfj;
...然后写if else:
if( setjmp(*bfj) == 0){
DS[SP-2].int_val=(int)bfj;;
//to store the bfj
}else {}并在其他地方使用存储的bfj to longjmp
bfj = (jmp_buf *)DS[TOP].int_val;
longjmp(*bfj,1);其中DSTOP.int_val是我存储它的地方。看起来很清楚,我想使用存储的bfj来做嵌套goto和返回。但是,当我尝试调试时,我得到了“未处理的异常”。我从一开始就明白了:
if( setjmp(*bfj) == 0)如果有人能告诉我解决方案,我会很高兴的。
发布于 2010-06-22 07:14:52
从您的代码中,您实际上并没有为jmp_buf分配内存。您可以做以下几件事:
jmp_buf动态地分配你的new,当你用完它时,你会想要delete它,当你想要它的指针时,你可以用&bfj.来获取它的地址
jmp_buf放在堆栈jmp_buf 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。
https://stackoverflow.com/questions/3089047
复制相似问题