Zweidimensionales Feld und segmentation fault
-
Hallo Leuts,
ich möchte ein 2d-Feld von integern allokieren um das nachher zu füllen.
Das Feld soll [nSize][2] groß sein.
Ich mach das so:int** anFeld = (int**) new int[nSize]; anFeld[0] = new int[nSize*2]; // jetzt muss der Speicher noch tatsächlich allokiert werden for (int i=0; i<nSize; i++) { anFeld[i] = anFeld[0] + i * 2; } // bis hier alles OK - aber jetzt! for (int j=0; j<nSize; j++) { anFeld[j][0] = 0; // seg fault ... :confused: anFeld[j][1] = 0; // aber erst bei j==nSize-1 (alle vorhergehenden OK) }Diesen Speicherzugriffsfehler kann ich mir nicht erklären.
Vielleicht kann mich einer von euch erleuchten?Gruß Mea
-
Hi
dein Problem ist, dass du dein Feld vollkommen chaotisch anlegst. Wenn du ein Feld der groesse nxm anlegen willst, legst du zuerst ein n-dimensionales Feld von Feldern an. Davon initialisierst du jedes der Felder als m-dimensionales Feld.
int **array = new int*[n]; for(int i = 0; i < n; i++ ) { array[i] = new int[m]; }fertig. Willst du jetzt noch direkt Werte setzen kannst du das in der Schleife machen und zwar ganz normal mit array[i][j] = 42; oder so.
-
P.S.:
Meaculpa schrieb:
int** anFeld = (int**) new int[nSize];die Sternchen besser an die Variable haengen, denn:
int** bla, blubb;legt nicht, wie viele glauben, zwei int** an, sondern bla ist vom typ int**, blubb vom typ int, weil die Sternchen zur variable gehoeren. Wenn man sich das angewoehnt passieren da weniger Fehler.