为什么在执行此C程序时会出现分段错误?

时间:2015-01-18 14:02:47

标签: c segmentation-fault

当我执行这个程序时,我得到一个段错误,不知道为什么。 它应该返回输入的阶乘(?),只要它大于0。

#include <stdio.h>

int factorial(int input) 
{
    if (input > 0)
    {
    return input * factorial(input--);
    }
    else
    {
    return 1; 
    }
}
int main()
{
    printf("%d", factorial(23));
    return 0;
}

1 个答案:

答案 0 :(得分:2)

factorial(input--)没有按照您的想法行事。使用factorial(input-1)

这是page that documents the post-decrement operator,应该有助于正确使用它。您从不必须使用它。您可以随时使用+-=(作业)执行您的操作。

您的程序正在产生细分错误,因为在您编写错误后,factorial(23)会调用factorial(23),从而产生stack overflow