为什么这个 C++代码片段分段错误?

发布于 2024-08-31 16:53:46 字数 195 浏览 5 评论 0原文

#include <iostream>
using namespace std;

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

int main() {
    recur(10);
    return 0;
}
#include <iostream>
using namespace std;

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

铁憨憨 2024-09-07 16:53:46

这就是无限递归。所以当堆栈空间耗尽时就会出现段错误。

Thats an infinite recursion. So it will seg fault when it runs out of stack space.

枯叶蝶 2024-09-07 16:53:46
1 and recur(--x);

相当于

recur(--x);

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

我猜你的意思

  x and recur(--x);

是仅当 x 非零时才进行递归调用。

1 and recur(--x);

is equivalent to

recur(--x);

Clearly you are making infinite recursive calls which leads to stack overflow followed by segmentation fault.

I guess you meant

  x and recur(--x);

which makes the recursive call only when x is non-zero.

魂ガ小子 2024-09-07 16:53:46

它没有递归的终止条件,因此将递归直到用完堆栈空间。

It doesn't have a termination condition for the recursion, and so will recurse until you run out of stack space.

酒儿 2024-09-07 16:53:46

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

另外, 1 和 有什么意义?这是一个无操作...也许您的意思是 x 和,当 x 达到 0 时,它会停止递归,前提是您只调用过recur 为正数(负值仍会导致无限循环)。

recur is an infinite loop; you need to put a base condition on there so it stops calling itself.
E.g. (at the top of the function) if (x <= 0) return 0;

Also, what's the point of the 1 and ? It's a no-op... maybe you meant x and, which would stop the recursion when x reached 0, provided you only ever called recur with a positive number (negative values would still cause the infinite loop).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文