Dynamische Speicherverwaltung und Strukturen in C

  • Hallo, ich studiere E-Technik im 2. Semester, lerne gerade für unsere Informatik Klausur, in der wir die Programmiersprache C behandeln und wundere mich über eine Lösung, die ich mit meinem zwar mit meinem Übungsgruppenleiter ausgearbeitet habe jedoch meiner Meinung nach ein Teil fehlt.
    Hier erst einmal die Aufgabe:



    • Legen Sie eine Struktur test_struct an, die als Elemente die Variablen int a, float b, char *c enthaelt.
    • Definieren Sie mittels typedef einen neuen Datentypen mystruct fuer diese Struktur.
    • Deklarieren Sie einen Pointer vom Typ mystruct. Allozieren Sie nun dynamisch Speicher fuer 20 Elemente vom Typ mystruct und lassen Sie den soeben deklarierten Pointer auf diesen allozierten Speicherbereich zeigen.
    • Geben Sie den Speicherbereich wieder frei.
    • Legen Sie nun ein Array mit Platz fuer 20 Pointer vom Typ mystruct an. Initialisieren sie diese 20 Pointer indem Sie Sie nun mit Hilfe einer Schleife fuer jeden dieser Pointer Platz fuer 100 Elemente vom Typ mystruct allozieren. Allozieren sie ferner fuer den Pointer char *c jeder Struktur Speicherplatz fuer 100 Elemente vom Typ char.
    • Initialisieren Sie fuer alle eben allozierten Elemente die Variable a mit 1, die Variable b mit 2.0 und c mit "test".
    • Geben Sie den allozierten Speicherbereich wieder frei.


      Problem an dem folgenden Code ist, das ich bei Punkt 5. keinen Speicherbereich für char *c alloziere. Jedoch bin ich ein wenig hilflos an welcher Stelle ich dies tun sollte.
      Hier meine Lösung:


      Die einzige Idee die ich hätte wäre, mit in die for Schleife, bevor ich c initialisiere:
      "str[i]->c=(char*)malloc(100*sizeof(char);
      hineinzubringen. Jedoch zweifle ich noch an der Richtigkeit.


      ich würde mich über Tipps, Kommentare oder Hinweise freuen.
      Gruß Harry

    Edited 2 times, last by Harry1: Code formatieren ().

  • Ok ich glaube ich habe es nun selbst entwickelt bekommen würde mich trotzdem freuen falls jemand nochmal die Richtigkeit überprüfen könnte ;).


  • vielleicht ein paar hinweise:


    *) bitte verwende code-tags, so unformatierten code mag ich nie lesen (und ich denke den anderen hier geht es auch so)
    *) void * returns castet man nicht ("man 9 style" auf openbsd, bzw. c-faq)
    *) ich mag mallocs in der version lieber: "x = malloc(sizeof(*x));". netter wenn sich der typ aendert.
    *) mixed dec & code seh ich auch, aber keine ahnung ob du C90 sein willst/musst.
    *) fuer so speicherzeug ist "valgrind --leak-check=yes" immer ganz hilfreich.

    Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

    Edited once, last by Kampi ().