为什么这个C ++代码片段分段有问题?

时间:2010-05-11 08:15:27

标签: c++ segmentation-fault

#include <iostream>
using namespace std;

int recur(int x) {
    1 and recur(--x);
    cout << x;
    return x;
}

int main() {
    recur(10);
    return 0;
}

4 个答案:

答案 0 :(得分:5)

这是一次无限递归。因此,当堆栈空间不足时,它会出现故障。

答案 1 :(得分:4)

1 and recur(--x);

相当于

recur(--x);

显然,您正在进行无限递归调用,导致堆栈溢出,然后是分段错误。

你的意思

  x and recur(--x);

仅在x为非零时才进行递归调用。

答案 2 :(得分:2)

它没有递归的终止条件,因此会递归直到你的堆栈空间不足。

答案 3 :(得分:2)

recur是一个无限循环;你需要在那里放置一个基本条件,以便它不再自行调用 例如。 (在函数的顶部)if (x <= 0) return 0;

另外,1 and有什么意义?这是一个无操作......也许你的意思是x and,如果你只是用x来调用0,那么它会停止递归recur负值仍然会导致无限循环。)