将jmp_buf指定为指针

我想将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)
如果有人能说出解决方案,我会很高兴。     
已邀请:
从你的代码中,你实际上并没有为你的alloc4分配内存。你可以做几件事: 用ѭ6Dynam动态分配你的
jmp_buf
,当你完成它时你会想要
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
。     

要回复问题请先登录注册