为什么会有SIGFPE?

问题描述

| 由于某种原因,它曾经可以工作。但是现在我得到了SIGFPE .....怎么了?
#include \"usefunc.h\"

long factorial(long num) {
    if (num > 1) {
        long counter;
        long fact = 1;
        for (counter = num; counter > 0; counter--) fact *= counter;
        return fact;
    }
    else return 0;
}

long combinations(long n,long k) {
    return (factorial(n)) / (factorial(k)*factorial(n-k));
}

int main()
{
    printf(\"How many rows of Pascal\\\'s triangle should I print?\\t\");
    int rows = GetInteger();
    long pArray[rows][rows];
    int counter;
    int counter2;
    for (counter = 1; counter <= rows; counter++)
    {
        int y = rows-counter;
        for (; y > 0; y--) printf(\"    \");
        for (counter2 = 0; counter2 <= counter; counter2++)
        {
            /*

                    THIS IS AN OUTPUT

            */
            printf(\"%9.0lu\",(long) combinations(counter,counter2));
            pArray[counter][counter2] = (long) combinations(counter,counter2);
        }
        /*

                    THIS IS AN OUTPUT

        */
        printf(\"\\n\");
    }
    return 0;
}
    

解决方法

        您的阶乘返回0,这可能会导致被0除的错误。它不应该返回1吗?
jcomeau@intrepid:/tmp$ cat test.c; make test;./test
#include <stdio.h>
int main() {
 return printf(\"%f\\n\",1L / 0);
}
cc     test.c   -o test
test.c: In function ‘main’:
test.c:3: warning: division by zero
Floating point exception
    ,        我认为这是您尚未展示给我们的ѭ2shown函数,因为您提供的代码均未使用任何浮点数。
SIGFPE
并不表示浮点异常,即使该名称来自此。 @jcomeau已经正确确定了为什么获得SIGFPE。