我正在编写一个打印无限数字的程序。
#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。