Stack overflow
-
Hallo!
Ich habe hier ein kleines Programm geschrieben, dass mir Listenelemente sortiert. Problem: Ab ca. 1000 Array-Elementen bringt er mir die Meldung: "stack overflow" und verweist auf die Funktion "Partition".
Nun, ich dachte mir, fein, anstatt von int x, int i und int j mach ich int*x = new int; und so weiter.
Sagt er mir: Konnte nicht genügend Speicher allokieren. Nicht genügend Speicherplatz vorhanden.
Weiß einer, was da nicht stimmt?Im Übrigen: Benutze ich anstatt "A_init_sortiert" "A_init_random", wo jedem Element mittels random() eine Zufallszahl zugeordnet wird, kommt dieser Fehler nicht. Nichteinmal bei 10^7 Elementen.
(Ja, es passt nicht so ganz hier rein, aber irgendwie doch mehr als ins C++-Forum.)
#define LEN 1000 int main(void){ int* A = new int[LEN]; A_init_sortiert(A); Quicksort(A,1,LEN-1); return 0; }
void Quicksort(int A[], int p, int r){ int q; if(p<r){ q = Partition(A,p,r); Quicksort(A,p,q); Quicksort(A,q+1,r); } return; } int Partition(int A[], int p, int r){ int x = A[p]; int i = p-1; int j = r+1; while(1){ while(A[--j]>x){ } while(A[++i]<x){ } if(i<j) Vertausche(&A[j],&A[i]); else return j; } } void Vertausche(int *a, int *b){ int tmp; tmp = *a; *a = *b; *b = tmp; } void A_init_sortiert(int A[]){ for(int i = 0; i<LEN; i++) A[i] = i; }
-
zu große rekursionstiefe, algorithmus überarbeiten :xmas1:
-
sothis_ schrieb:
zu große rekursionstiefe, algorithmus überarbeiten :xmas1:
Ich hab ne bessere Idee: Wie vergrößere ich den Stack - sagen wir mal - um 200MB? :xmas2:
-
größerer stack muss her schrieb:
sothis_ schrieb:
zu große rekursionstiefe, algorithmus überarbeiten :xmas1:
Ich hab ne bessere Idee: Wie vergrößere ich den Stack - sagen wir mal - um 200MB? :xmas2:
Hab jetzt doch noch gerechnet. RAM reicht nicht aus... muss Wost-Case eben dran glauben und fliegt raus.
Hat sich damit also erledigt. :xmas1: