当`if(变量%2 == 0)`时程序崩溃

时间:2013-06-06 01:19:20

标签: c crash undefined-behavior modulo perfect-numbers

我正在编写一个找到完美数字的程序。阅读完这些完美数字之后,我遇到了一个列表:List of perfect numbers。目前输出是:

28         // perfect
496        // perfect
8128       // perfect
130816     // not perfect
2096128    // not perfect
33550336   // perfect

我决定创建数组并将数字放在一起,将数字全部除以(不包括其余数字)。因此,我将能够通过添加数组的所有元素来验证它是否是完美的数字。但应用程序崩溃,我无法理解为什么:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    unsigned long number;
    unsigned long arr2[100] = {0};
    int k = 0;

    for ( number = 0; number <= 130816; number++ )
        if ( 130816 % number == 0 )
            arr2[k++] = number;

    for ( k = 0; k < 100; k++ )
        printf("%lu", arr2[k]);

    return 0;
}

2 个答案:

答案 0 :(得分:4)

你在这里做模数zero

if ( 130816 % number == 0 )

这是未定义的行为。如果您在1启动for循环,则应该解决该问题。但是,自N % 1 == 0 N以来,您可能需要从2开始。

来自C99标准,6.5.5 /5C11中未更改):

  

/运算符的结果是来自第一个操作数的除法的商   第二; %运算符的结果是余数。在这两个操作中,如果值为   第二个操作数为零,行为未定义。

答案 1 :(得分:2)

当数字= 0时,你除以零;

138816 % number涉及分裂和余数。