c-递归调用函数时出现分段错误



我正在编写一个打印无限数字的程序。

#define false 0
#define true 1
int test(int idx) {
printf("%dn",idx);
test(idx+1);
return 0;
}
int main() {
test(0);
return 0;
}
// Segmentation fault: 11

此程序在打印262045后以segfault结束。我知道它是由堆栈溢出引起的。

有没有什么聪明的技巧可以让递归更深入?就像在达到某个数字并清除堆栈时调用另一个递归函数一样?

我试过这样做。

#define false 0
#define true 1
int test2(int idx) {
printf("test2 heren");
printf("%dn",idx);
test2(idx+1);
return 0;
}
int test(int idx) {
if (idx == 262000) {
return test2(idx);
}
printf("%dn",idx);
test(idx+1);
return 0;
}
int main() {
test(0);
return 0;
}

但是堆栈没有被清除。打印262044后仍然存在segfault。

在第一个片段中,您遇到了堆栈溢出。

在第二种情况下,由于有符号整数溢出,它调用UB。

相关内容

  • 没有找到相关文章

最新更新