dynamische Arrays in Strukturen



  • ich möchte in einer Struktur einen Array haben, so ungefähr:

    struct object
    {
    int v[];
    short length;
    short color;
    };

    aber der Array muss dynamisch sein, da erst zu Laufzeit bekannt wird wieviele Eckpunkte das Objekt haben soll
    und diese sollen dann in dem v[] gespeichert werden

    geht das überhaupt? ich muss dem Array ja irgendwann eine Größe zuweißen
    aber sowas wie:

    object o;
    o.v[] = {0,0,0,0,0};

    oder

    object o;
    int v[] = {0,0,0,0,0};
    o.v = v;

    geht nicht



  • Du musst den Array als Pointer deklarieren und dynamisch Speicher anfordern. Initialisieren geht nur über eine Schleife (oder per memset mit 0).

    struct object {
      int *v;
      ...
    };
    
    ...
    struct object o;
    o.v = (int*)malloc(anzahl * sizeof(int));
    memset(o.v, 0, anzahl * sizeof(int)); 
    ...
    o.v[1] = 400;
    ...
    /* irgendwann freigeben!! */
    free(o.v);
    


  • also initialisierung geht mit calloc() prima.

    returnwerte von malloc() werden in ansi c nicht gecastet. keine widerrede.



  • c.rackwitz schrieb:

    also initialisierung geht mit calloc() prima.
    returnwerte von malloc() werden in ansi c nicht gecastet. keine widerrede.

    Hab das früher auch immer gemacht nur um die compiler warnung zu unterdrücken.
    Bis ich draufgekommen bin dass die Warnung einfach so verschwindet wenn ich
    #include <stdlib.h> einbinde. 😉
    Kurt



  • danke, habs jetzt hinbekommen
    einfach nen Pointer genommen

    das ich nie auf sowas kom 🙄


Anmelden zum Antworten