dynamisches struct Array



  • hallo!hätte da mal eine frage:
    das programm sollte eine nicht festgelegte anzahl von autos einlesen welche in ein dynamisches struct array gespeichert werden.

    hab mir das irgendwie so gedacht >>

    typedef struct
    {
    char name[40];
    int baujahr;
    //usw.
    } CARS;

    int main
    {
    x= calloc(2,sizeof(*d1));
    CARS d1[x];
    .
    .
    }
    Frage: wie erstellt man ein dynamisches struct array? da ja die grösse von d1 konstant sein muss wird mein ansatz nicht funktionieren ?
    vielen dank



  • {
       CARS * d1 = calloc(x, sizeof(CARS));
       .
       .
       .
       free (d1);
    }
    


  • calloc() war schon der richtige Weg - du hast es nur falsch eingesetzt:

    int x;
    CARS* d1;
    printf("Wie groß soll das Array werden? ");
    scanf("%i",&x);
    d1 = calloc(sizeof(CARS),x);
    


  • Es kommt auf deinen Compiler drauf an. Seit C99 sind dynamische Arrays erlaubt (innitialisieren mit variablen).

    calloc ist natürlich eine Möglichkeit aber viele Compiler bieten mit alloca die Möglichkeit Speicherplatz dynamisch vom Stack anzufordern, was ich hierfür immer viel besser find (auch wenn nicht ANSI-C!).



  • Avanox schrieb:

    Es kommt auf deinen Compiler drauf an. Seit C99 sind dynamische Arrays erlaubt (innitialisieren mit variablen).
    calloc ist natürlich eine Möglichkeit aber viele Compiler bieten mit alloca die Möglichkeit Speicherplatz dynamisch vom Stack anzufordern, was ich hierfür immer viel besser find (auch wenn nicht ANSI-C!).

    dynamische arrays von grossen structs sowie die verwendung von 'alloca' mit selbigen kann böse enden (stack overflows etc.).
    also lasst es besser.
    🙂



  • VIELEN VIELEN DANK für die schnellen antworten!



  • Hallo,

    Ich habe das selbe Problem wie klac.
    Hab das nun so zusammengebastelt,
    aber ich verstehe nicht ganz was "x" in dem Fall ist.

    So sieht es bei mir jetzt aus:

    system("Cls");
    
    	index++;
    	person p1 = calloc( ?x? , sizeof(index));
    
    	cout << "struct " << index;
    	cout << "\n";
    	cout << "\nNamen: ";	cin >> p1[index].vorname;
    	cout << "\nNachname: "; cin >> p1[index].nachname;
    	cout << "\nAlter: ";	cin >> p1[index].alter;
    	cout << "\nGröße: ";	cin >> p1[index].groesse;
    


  • Dann lies es doch nach: calloc.

    (Das nächste mal machst du einen neuen Thread. Nach 6,5 Jahren sollte der in Frieden ruhen können)



  • Da du C++ nutzt, solltest du auch C++-Mittel verwenden.
    In diesem Fall std::vector.



  • @ DirkB
    Nachgelesen hatte ich, aber nicht so recht verstanden wie ich es benutzen soll.
    *nochmal mit befassen werd*

    Wenigstens kann man mir nicht vorwerfen die sufu nicht benutzt zu haben. xP

    Trotzdem danke ^^

    @Nathan
    Das vector Prinzip sieht ganz sinnvoll und simple aus.

    Danke für schnelle Antwort+Lösung. 😃



  • calloc schrieb:

    void* calloc (size_t num, size_t size);

    Allocate and zero-initialize array
    Allocates a block of memory for an array of num elements, each of them size bytes long, and initializes all its bits to zero.

    The effective result is the allocation of a zero-initialized memory block of (num*size) bytes.


Log in to reply