c - 分段故障核心转储: Function that returns the next prime number

标签 c recursion segmentation-fault primes coredump

我得到了段错误核心转储。我的函数应该返回输入参数后面的素数,或者如果它是素数则返回该数字。

当我编译时,我没有错误,我也用-Wall编译,它工作了。但是当我运行该程序时,我收到segmentation failure, core dumped。我看不到问题所在。

#include <stdio.h>

int ft_next_prime(int nb)
{
        int i = 2;
        int notPrime = 0;

        while (i++ < 9 || notPrime != 1) {
                if (nb == i)
                        i++;
                else if (nb % i == 0)
                        notPrime = 1;
        }
        return ((notPrime) ? ft_next_prime(nb++) : nb);
}

int main()
{
        printf("%d", ft_next_prime(15));
}

为什么?

另外,我可以写这个吗?

while (i++ < 9 || !notPrime)
    if (nb % (i != nb) == 0)
        notPrime = 1;

最佳答案

使用以下行代替返回语句:

return ((notPrime)? ft_next_prime(nb+1) : nb);

导致段错误的原因有多种。就您而言,堆栈空间不足。

ft_next_prime(nb++) 执行并返回 ft_next_prime(nb) — 具有完全相同的参数 — 然后递增 nb — 无意义但这正是您告诉它要做的。

关于c - 分段故障核心转储: Function that returns the next prime number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66606118/

相关文章:

c - 按位 '&' 运算符

c - 解释gdb段错误

recursion - 是否可以在 Rust 中进行递归闭包?

recursion - 如何将文件夹的内容递归归档为 Jenkins 上的工件?

c++ - C++ 中的指针、多态性和段错误

objective-c - objective-c 代码中的段错误

c - 指针指向指针的问题

char** 来处理字符串?

c - 我怎样才能弄清楚我的 C 编译器 GCC 使用的默认标准是什么?

python - 使用 lambda 函数对数字求和和计算数字