Initialisierung von mehrdimensionalen Strukturen
-
Hey allesamt,
ich habe ein kleines Problem bei der Initialialisierung von mehrdimensionalen Strukturen. Zu dem Problem habe ich ein kurzes Beispielprogramm erstellt. In meinem Fall möchte ich eine Zweidimensionale Matrix 3 x 9 aus Daten des Typs "Struct" erstellen. Beim Testen erhalte ich einen Laufzeitfehler.
Wie beseitige ich diesen Laufzeitfehler?
Das Beispielprogramm:
#include <iostream> typedef struct { std::string name; int max; int min; } Struct; int main(int argc, char** argv) { Struct** statis; statis=new Struct*[9]; *statis=new Struct[3]; statis[0][0].max=1; //okay statis[0][0].max=1; //okay // statis[2][7].max=2; //Runtime Error ???? system("pause"); }
Vielen Dank und viele Grüße CoolFire
-
statis ist nach der ersten Allokation ein Array von 9 Struct*.
statis[0] (entspricht *statis) ist nach der zweiten Allokation ein Array von 3 Struct.
statis[2] (welches Du füllen willst) ist nicht initialisiert.
-
Mit Schleifen wäre das nicht passiert *g*
Und C++ ist eine Station weiter unten
-
@TactX & LordJaxom
vielen Dank für die Hinweise.Mein Beispielprogramm läuft jetzt.
Meintet ihr es in etwa so?@TactX
habe das Programm etwas dem Unterforum angepasst.#include <iostream> typedef struct { char* name; int max; int min; } Struct; int main(int argc, char** argv) { Struct** statis; int anzA=9; statis=new Struct*[anzA]; for (int i=0;i<anzA;i++){ statis[i]= new Struct[3]; } statis[0][7].max=1; statis[1][7].max=2; statis[2][7].max=3; printf("%d %d %d",statis[0][7].max,statis[1][7].max,statis[2][7].max); }
-
Das ist immer noch C++
(in C gibt es kein new, sondern nur malloc()) Aber so ist das Programm schon "besser".
-
Ich habe auch sicherheitshalber "etwas ... angepaßt" geschrieben.
malloc() ... da werde ich mich mal informieren.