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.