Fehler bei Arraydeklaration bei großen Längen
-
Hey,
ich bin noch recht neu in C und versuche meine Kenntnisse durch Üben zu erweitern. Ich möchte ein Primzahlprogramm schreiben, das das Sieb des Eratosthenes implementiert. Dazu brauche ich ein großes Array aber bei der Deklaration ist mein Problem. Hier eine abgespeckte Version, wo bereits der Fehler auftritt:#include <stdlib.h> #include <math.h> int main(){ int sieb[2000000][2]; return 0; }
Die Kompilierung funktioniert einwandfrei, nur bei der Ausführung tritt ein Fehler ab einer Arraylänge von ca 250000 auf. Es kommt dann nur eine Windowsfehlermeldung, dass ein Fehler aufgetreten ist, aber keine näheren Details.
Wo könnte der Fehler liegen? Wie lässt er sich beheben?
LG,
Michael
-
Knappe 16Mb großes Array ... paßt nicht aufn Stack. Also nimm den Heap! Sprich malloc das ganze und mach aus "2000000" = "2000 * 1000"
-
oder global, dann geht's auch (ok, nicht reine Lehre, manchmal aber praktisch)
-
Mir ist auch nicht ganz klar, was du mit der 2ten Dimension willst. Dein Programm soll vermutlich nur den Ablauf des "Siebens" veranschaulichen. Dafür brauchst du keine 2te Dimension. Der Algo geht etwa so
1) Allokiere Array der Größe N 2) Setze alle Werte von Array auf 1 // 1 kennzeichnet später primzahlen 3) "Sieben": for(index = 2; index < N; index++) if(Array[index] != 0) for(index2 = index; index2 * index < N; index2++) Array[index2 * index] = 0; 4) fertig!