我最近开始学习C语言。我用MinGW和Cygwin GCC使用Code :: Blocks。C中的“状态堆栈溢出”,使用简单迭代
我为Project Euler问题10制作了一个非常简单的素数筛,它将低于特定限制的素数打印到标准输出。它工作正常,直到大约500000作为限制,但在此之上,我的minGW编译的.exe崩溃,GCC编译的抛出一个“STATUS_STACK_OVERFLOW”异常。
我很困惑,为什么,因为代码是完全非递归的,由简单的for循环组成。
#include <stdio.h>
#include <math.h>
#define LIMIT 550000
int main()
{
int sieve[LIMIT+1] = {0};
int i, n;
for (i = 2; i <= (int)floor(sqrt(LIMIT)); i++){
if (!sieve[i]){
printf("%d\n", i);
for (n = 2; n <= LIMIT/i; n++){
sieve[n*i] = 1;
}
}
}
for (i; i <= LIMIT; i++){
if (!sieve[i]){
printf("%d\n", i);
}
}
return 0;
}
试着设置一个更高的'ulimit'。在栈上分配550000个整数可能会导致这种情况。 – Benoit 2012-03-06 17:34:16