【发布时间】:2021-10-10 13:11:34
【问题描述】:
我正在尝试使用这些函数创建一个无限循环(不成功)。
我的代码:
jmp_buf buf1;
void foo(){
int z = 4, y = 1;
int v = setjmp(buf1);
if(v == 0){
printf("A%d", z);
longJmp(buf1, 1);
}
else if(v == 1){
printf("B%d", y);
longjmp(buf1,1);
}
}
int main(){
int v = setjmp(buf1);
if( v == 0){
printf("C%d", 1);
foo();
longjump(buf1,1);
}
}
我以为它会打印 C1A4B1B1B1....(B1 永远重复)但我只得到 C1A4B1 并且程序停止(分段错误)。 调用longJmp不总是返回带参数val的setJmp吗?
想知道我的错误在哪里。
编辑:我在得到答案之前复制的代码错误地不正确,longjmp(buf1,2) 而不是 longjmp(buf1,1)。 此外,我没有复制导致段错误的完整主代码。 (调用 foo 后的另一个 longjmp)
【问题讨论】:
-
我建议您学习如何使用调试器以及如何使用它来设置断点。在每个
setjmp调用上设置一个断点,并查看它每次返回时返回的值。 -
另外请创建一个正确的minimal reproducible example,它会实际构建(即使添加头文件后显示的代码也不会构建)。然后将其复制粘贴到您的问题中。