2-D Array Speicherproblem [solved]



  • Hallo,

    mittels einer Klasse lege ich ein dyn. 2-D Array an. In der Klassendeklaration sind folgende Werte private:

    int 		n; 		// Dimension
    double		**Matrix;       // Die Matrix
    int		MAX_DIM;	// Maximale Dimension
    int 		MAX_WIDTH;	// Maximale Breite der Bandmatrix
    

    So. Sagen wir mal die MAX_WIDTH wird im Konstruktor mit 3 initialisiert.

    Wenn ich jetzt mit:

    Matrix = new double*[MAX_WIDTH];
    
    	for (int i=0; i< n; i++){
    		Matrix[i] = new double[MAX_WIDTH];
    	}
    

    den Speicherplatz für die Zeilen erzeuge (was auch klappt), und dann mittels

    for (int i=0; i < n; i++) {
    		 for (int j=0; j < MAX_WIDTH; j++) {
    			 Matrix[i][j] = 1.;
    		 }
    	}
    

    Die Matrix initialisieren will, klappt das nur bei bis zu 4 Zeilen. Wenn das erste Element der 5. Zeile mit sagen wir mal Matrix[4][0] = 1.; initialisiert werden soll, bleibt das Programm hängen.

    Warum geht es bis zur 4. Zeile (also 0-3) problemlos, und danach nicht mehr???

    🙂



  • king-al schrieb:

    Hallo,
    So. Sagen wir mal die MAX_WIDTH wird im Konstruktor mit 3 initialisiert.
    ...

    Warum geht es bis zur 4. Zeile (also 0-3) problemlos, und danach nicht mehr???

    Denk mal drüber nach vielleicht gibt es ja einen Zusammenhang 😉

    schirrmie



  • phfuck... 😃

    Matrix = new double*[MAX_WIDTH];
    

    muss natürlich richtig:

    Matrix = new double*[n];
    

    n= Dimension lauten...

    🙄

    danke schirrmie



  • gelöscht



  • Rechteckige 2D-Arrays macht man nicht mit „dynamischem Array von dynamischen Arrays“! Niemals, Niemals, NIEMALS!
    (Gründe kannste dir selbst überlegen, vor allem im Vergleich zu der folgenden Möglichkeit)

    Du solltest die Matrix linear auffassen und den Index umrechnen (a[x, y] wird zu a[x + y * zeilenbreite] oder a[x * spaltenhöhe + y]). So macht's der Compiler auch, wenn du „Array von statischen Arrays“ benutzt.


Log in to reply