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:


Anmelden zum Antworten