dynamisch mehrdimensionales Array erstellen?



  • Also ich würde gerne nen mehrdimensionales Array dynmaisch erstellen, dabei gibts bei mir aber immer nur ne Fehlermeldung. So sieht das ganze bei mir aus:

    float * fielda;
    float * fieldb;
    int size;
    //...
    //size bekommt  nen Wert zur Laufzeit
    //..
    //das geht
    fielda = new float[sizeof(float) * size * size];
    //das nicht
    fieldb = new float[sizeof(float) * size][sizeof(float) * size];
    

    Fehlermeldung:
    *Konstantenausdruck erforderlich
    Konvertierung von 'float ( )[1]' nach 'float ' nicht möglich
    Wenn ich drüber nachdenke, kommt mir mein Code da auch sehr blöd vor 🙄
    Aber ich brauch unbedingt nen zweidimensionales Array (statt zB so was wie fielda[x
    size+y]).
    Wär nett, wenn mir einer helfen könnte 🙂



  • Guck mal ins MFC-Forum. Da habe ich gerade eine ähnliche FRage beantwortet... In den FAQ steht dazu auch ein gaaaanz langer Artikel...



  • bähh... MFC
    Aber sehr lustig, dass da jemand auf die gleiche Idee kam wie ich.
    Jetzt werd ich mich aber erst einmal dafür bestrafen 😉 , dass ich nicht in die Faq geschaut habe, mehr kann man sich ja nicht zu dem Thema wünschen
    Danke



  • Das Problem ist, dass du bei einem zweidimensionalen Array keinen normalen Pointer verwenden kannst. Du hast aber wie beim eindimensionalen Array einen einfachen Pointer verwendet. Wenn du nun wie folgt einen Pointer auf ein Array deklarierst und dann diese Speicherallokation durchführst, dürfte es keine Probleme mehr geben.
    Noch etwas wichtiges: Der Pointer muss die zweite Dimension wissen, denn es ist ja nichts anderes als ein Pointer auf ein Array.

    Daher folgende Deklaration:

    Typ (*Bezeichner)[Dimension];

    Beispiel:

    int (*pointer)[4];

    Das wär ein geeigneter Pointer für ein zweidimensionales Array welches als Grundtyp ein Array von 4 Elementen besitzt.

    Hoffe geholfen zu haben 😉



  • und wenn du es ganz dynamisch machen willst:

    double** feld;
    
    feld = new double*[ersteDimension];
    for ( i = 0; i < ersteDimension; ++i )
      feld[i] = new double[zweiteDimension];
    


  • Also, eigentlich wollte ich auf nen zweidimensionales ausweichen, weil hier irgendwas ganz faul ist. Jetzt find ich das aber schwachsinnig, es muss auch so gehn.
    Also mein ursprungsproblem ist, dass ich nen festes statisches Array habe und per

    #define field(x,z) field[x][z]
    

    abfrage.
    dann hab ich das Array wie oben beschrieben (eindimensional) dynamisch erzeugt und so festgelegt

    #define field(x,z) field[x*size+z]
    

    Ich hab eigentlich gedacht, das wäre gleichwertig, aber komischerweise gibt es jetzt nette Zugriffsverletzungen, die vorher nie aufgetreten sind. Ich versteh das einfach nicht....
    Ist das jetzt nicht gleichwertig oder wie, über Hilfe wäre ich sehr dankbar.
    🙂



  • vieleicht ist es besser, wenn ich nen neuen Thread aufmache?


Anmelden zum Antworten