Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Mehrdimensionales Array in C++

Chakhi / 5 Antworten / Flachansicht Nickles

Hi..

ich habe folgende Code und möchte ich damit erreichen, dass ich eine Ebene in Feldern unterteile! Ich habe gedacht, ich könnte das über ein (2D)Array realisieren und zwar so, dass ich die Felde auf die Ebene -mit der Länge und Breite von xdim und ydim- mit Raster 1mm einrichte!
und ich möchte auch, dass ich am Anfang die Felde mit dem WErt 0 initialisieren, so dass ich so was erhalte:
0 0.. 0
0......0
........
0......0

und hier ist mein Code, mit der Fehlermeldungen:


{
float grenzen[6];
int xdim,ydim;
int xmin ,xmax ,ymin ,ymax;



// geometrische Grenzen in x und y Richtung auslesen

polydata->GetBounds(grenzen); //(xmin,xmax, ymin,ymax, zmin,zmax).
xmin = grenzen[0] - 20;
xmax = grenzen[1] + 20;
ymin = grenzen[2] - 20;
ymax = grenzen[3] + 20;

// Akkumulator mit Raster 1mm für x-y Ebene einrichten
xdim = xmax - xmin;
ydim = ymax - ymin;


int *pAkkum = new int[xdim];
int **ppAkkum = &pAkkum;
int *pData = new int[xdim*ydim];
for ( int i = 0; i

//akkumulator auf 0 initialisieren
for (int x_index = 0; x_index {
for (int y_index = 0; y_index {
ppAkkum[x_index][y_index]=0;

}

}

delete[] pAkkum;
delete[] ppAkkum;
delete[] pData;


}

und jetzt wenn zum Funktionaufruf kommt, wird das Ausführen abgebrochen und kommt die Meldung:
"Benutzerdefinierter Haltepunkt aus der Quellcode aufgerufen bei 77f7f570"
und dann wird das Fenster mit dem Ãœberschrift: " [Anhalten]-[Disassemblierung]" angezeigt.

was soll das alles! was soll ich da überprüfen?

Chakhi
p.s.: Code ist aus der Diskutionen vom vorherigen Posting (Array in C++ ) entstanden...

bei Antwort benachrichtigen
mr.escape Chakhi „Mehrdimensionales Array in C++“
Optionen

In der jetztigen form ist pAkkum ein array aus xdim int werten, in pAkkum selbst steht die adresse des ersten elementes.
ppAkkum ist eine zeiger auf einen int zeiger und speichert hier die adresse der variablen pAkkum, d.h. in ppAkkum ist die adresse gespeichert, wo die adresse des int arrays steht. Diese adresse (pAkkum) ist aber ein einzelwert (wahrsch. auf dem stack). Die verwendung von ppAkkum[i] mit i!=0 ist aber damit unzulässig, da damit auf andere inhalte des stacks zugegriffen wird. ppAkkum muss vielmehr ein array aus zeigern werden, die jeweils auf ein array aus int werten (spalten) zeigen.

ppAkkum->[adr 1. spalte]-------------------------------------------------------------------------------------------->[1. wert 1. spalte]
         [adr 2. spalte]------------------------------------------------------------------->[1. wert 2. spalte]      [2. wert 1. spalte]
         ...                                                                                [2. wert 2. spalte]      [3. wert 1. spalte]
         [adr vorletzte spalte]------------------------------->[1. wert vorletzte spalte]   [3. wert 2. spalte]      ...
         [adr letzte spalte]---->[1. wert letzte spalte]       [2. wert vorletzte spalte]   ...                      [letzter wert 1. spalte]
                                 [2. wert letzte spalte]       [3. wert vorletzte spalte]   [letzter wert 2. spalte]
                                 [3. wert letzte spalte]       ...
                                 ...                           [letzter wert vorletzte spalte]
                                 [letzter wert letzte spalte]

aus
int *pAkkum = new int[xdim];
int **ppAkkum = &pAkkum;
muss
int **ppAkkum = new *int[xdim];
werden (wie in einer früheren diskussion gezeigt).
delete[] pAkkum;
wird damit auch unnötig.

mr.escape

ps.:Das war ein krampf, bis ich die scheiss einrückungen oben hinbekommen habe!
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
lemming Dreamforger