gpt4 book ai didi

c - setjmp/longjmp 失败

转载 作者:太空宇宙 更新时间:2023-11-04 05:29:37 27 4
gpt4 key购买 nike

一段代码在这里

jmp_buf mark;
int Sub_Func()
{
int be_modify, jmpret;
be_modify = 0;
jmpret = setjmp( mark );
if( jmpret == 0 )
{
// sth else here
}
else
{
// error handle
switch (jmpret)
{
case 1:
printf( "Error 1\n");
break;
case 2:
printf( "Error 2\n");
break;
case 3:
printf( "Error 3\n");
break;
default :
printf( "Unknown Error");
break;
}
printf("after switch\n");
}
return jmpret;
}

void main( void )
{
Sub_Func();
// the longjmp after setjmp
longjmp(mark, 1);
}

结果是:
错误 1
切换后
段错误

我知道原因可能是 longjmp 跳回上一个栈。但我不确定细节,以及'mark'中存储了什么样的值,谁能解释一下?

最佳答案

setjmp()longjmp() 通过记录堆栈帧位置来工作。如果您在 Sub_Func() 中记录堆栈帧但在调用 longjmp() 之前从函数返回,则堆栈帧不再有效。longjmp() 应在与 setjmp() 相同的函数中调用(子函数可以)。

关于c - setjmp/longjmp 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11139744/

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