打印期间的分段错误包括大型阵列计算

时间:2014-08-11 12:42:22

标签: c arrays segmentation-fault

C中的这个程序应该删除一系列10 ^ 7个自然数中的每个第666个数字。

即使使用优化,问题似乎也可以正常编译。但是,在运行时停止在几次计算后抛出分段错误。我注意到当它停止了几十万个自然数字,远离10 ^ 7的上限。我起初尝试使用malloc动态内存分配来解决问题。我收到了相同的输出。我尝试使用静态数组来完成这项工作。

#include <stdio.h>

static unsigned int a[10000001] = {[0 ... 10000000] = 1};

void main(void) {

    unsigned int i = 1, last = 0, count = 0, test = 0;

    while(i < 100000) {
        count = 0; test = 0;

        while(count < 665) {
            if(a[last + count + test])
                count++;
            else
                test++;
        }

        last = last + test + count;

        if(last < 10000002)
            a[last] = 0;
        else {
            last = last - 10000001;
            a[last] = 0;
        }

        printf(" %u", last);

        i++;
    }

    printf("\n\n");
}

1 个答案:

答案 0 :(得分:3)

这是一个问题:

if(last < 10000002)
    a[last] = 0;

应该是:

if(last < 10000001)
    a[last] = 0;

此外,如果last + count + test是&gt;,则此声明可能会出现问题。 10000000

if(a[last + count + test])