Problem mit dynamischem Array



  • Also mein Pproblem ist, dass ich nen festes statisches Array hatte

    float field[size][size] //size hier konstant
    

    und per
    #define field(x,z) field[x][z]
    abfrage.
    Dann wollte ich mein Programm dynamisch machen und habe das Array über

    float * field
    field = new float[sizeof(float) * size * size];
    

    erstellt. Um im Quelltext nichts zu ändern hab ich dann das define so abgeändert

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

    Ich hab eigentlich gedacht, das wäre gleichwertig (mit dem statischen Array), 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.



  • field = new float[sizeof(float) * size * size];
    

    Bei new KEIN sizeof!!!



  • wirklich? Bei mir hat sich da nichts geändert 😞



  • Wenn man den Fehler mal rausgibt:

    field = new float[size * size]
    

    Dies erzeugt ein ein(!)dimensionales Array mit der Größe size*size. Da a[b] als *(a + b) definiert ist, wird dann bei field[2][2] das an Pos. 2 stehende Element als Adresse angesehen und dereferenziert --> access violation.

    Also müssen wir ein Array von Adressen erstellen und denen dann ein Array von Floats zuweisen:

    float** field;
    field = new float*[size];
    for (int i=0;i<size;++i)
        field[i] = new float[size];
    
    //Code ohne Gewähr ;)
    

    Dann kannst du ganz normal mit z.B.

    field[2][5] = 33.23f;
    

    auf das Array zugreifen.



  • mach ma

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

    [ Dieser Beitrag wurde am 31.05.2003 um 22:31 Uhr von DasPinsch editiert. ]


Anmelden zum Antworten