Salve a tutti. Ho compilato questo piccolo programmino in C++ che espleta la funzione di Crivello di Eratostene, un processo per trovare numeri primi. Praticamente, si fa un array riempendolo tutto con un numero, poi si comincia da 2 e si cambia il numero all'indice dell'array che corrisponde a 2 e ai suoi multipli. Poi da 3 e così via finchè si tolgono tutti i multipli e i numeri primi che si trovano nell'array hanno un flag che identifica che quell'indice è un numero primo. Il mio problema sta nel fatto che nel definire il massimo numero da cui è formato l'array, il mio compilatore (Dev-cpp) lo compila ma poi dà errore sulla finestra exe, che va in crash. Posto il programma:
#include <cstdlib>
#include <iostream>
#define MAXNUMERI 30
#define NUMERO_PRIMO 1
#define NUMERO_COMPOSTO 0
using namespace std;
int main()
{
int numero[MAXNUMERI];
for (int i=1;i<=MAXNUMERI;i++)
{
numero[i]=NUMERO_PRIMO;
}
for (int c=2;c<=MAXNUMERI;c++)
{
if (numero[c]==NUMERO_PRIMO)
{
int i=c+c;
do
{
numero[i]=NUMERO_COMPOSTO;
i=i+c;
}
while (i<=MAXNUMERI);
}
}
for (int i=1;i<=MAXNUMERI;i++)
{
if (numero[i]==NUMERO_PRIMO)
{
cout<<i<<endl;
}
}
int a;
cin>>a;
return 0;
}
"numero" è l'array e MAXNUMERI è il valore che identifica il massimo numero di caselle dell'array. Come mai se metto più di "circa" 45 il programma si compila ma va in crash?? (Come vedere. nelle ultime 2 righe ho dichiarato una nuova variabile per leggerla, poiché altrimenti il programma si chiudeva subito senza presentare i risultati: perchè??).
Grazie a tutti