Abstrakte Datentypen



  • Also ich hab ma einen weiteren Zeiger namens *zeiger erstellt und das so versucht!

    struct zahlen *zeiger;

    nach der do-schleife dann:

    zeiger = start->next;
    free(start);
    start = zeiger;

    komischerweise ist der erste wert aber immernoch in der ausgabe drin... 😮

    Und noch ne Frage.
    Gibts einen einfachen Befehl um die komplette Liste zu löschen? Also ohne dass ich die zeiger von element zu element springen lassen muss um sie einzeln auszulösen und mit free freizugeben?



  • Was ist bei dir der erste Wert ? Der nicht initialisierte Datenmüll in der ersten Struktur oder der erste von Dir eingegebene Wert ?

    Naaahaaa ??



  • du musst die liste selber loeschen. machs einfach und stell dich nicht so an.



  • Onyx schrieb:

    komischerweise ist der erste wert aber immernoch in der ausgabe drin... 😮

    Noch einmal:
    Was ist bei dir der erste Wert ? Der nicht initialisierte Datenmüll in der ersten Struktur oder der erste von Dir eingegebene Wert ?

    Onyx schrieb:

    Und noch ne Frage.
    Gibts einen einfachen Befehl um die komplette Liste zu löschen? Also ohne dass ich die zeiger von element zu element springen lassen muss um sie einzeln auszulösen und mit free freizugeben?

    Nein.

    Wären es z.B. 10 erzeugte Strukturen mit malloc:
    start = malloc( 10 * sizeof( struct liste ) );
    Dann wäre es ein im Arbeitsspeicher zusammenhängender Block und ein free(start)
    würde den reservierten Speicher der 10 Strukturen wieder freigeben.

    Hier sind die Strukturen sind im Arbeitsspeicher jedoch 'verstreut'. Nur start kennt die erste Struktur und jede next Variable kennt die Adresse der nächsten Struktur im Arbeitsspeicher.
    Also bleibt nichts anderes übrig, als von Zeiger zu Zeiger zu hüpfen.
    Generell gilt die Regel:
    ⚠ für jedes malloc ein free ⚠
    🙂



  • Na der erste eingegebene Wert!



  • Und das wundert dich jetzt ?


Anmelden zum Antworten