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");
}
答案 0 :(得分:3)
这是一个问题:
if(last < 10000002)
a[last] = 0;
应该是:
if(last < 10000001)
a[last] = 0;
此外,如果last + count + test
是&gt;,则此声明可能会出现问题。 10000000
:
if(a[last + count + test])