Я начал изучать C недавно. Я использую Code :: Blocks с MinGW и Cygwin GCC.
Я сделал очень простое простое сито для задачи 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;
}