我想将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)
如果有人能说出解决方案,我会很高兴。
答案 0 :(得分:2)
从您的代码中,您实际上并没有为jmp_buf
分配内存。你可以做几件事:
jmp_buf
动态分配new
,并在完成后delete
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
代替。