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.


Anmelden zum Antworten