Dynamische Listen...Speicherfreigabe



  • Hallo,

    ich habe folgendes Problem. Ich erstelle eine dynamische Liste.
    Die Elemente der Liste hole ich mir mit "new Listenelement". Dann wird mit der Liste gearbeitet. Die Liste wird in mehreren Funktionen verwendet und bearbeitet. Damit ich nicht immer die Zeiger usw. übergeben muss, habe ich einen globalen zeiger "anfang_liste". Durch diesen kann ich dann in jeder Funktion auf den Anfang der Liste zurückgreifen.
    Nun zu meinem Problem. Ich möchte nun die Liste lösche, also den Speicher frei geben. Das geht ja mit delete. Allerdings funktioniert das nicht, wenn ich z.B. "delete anfang_liste;". Da gibt es immer Fehler.

    WÄre toll, wenn mir da jemand helfen könnte und weiß, wie man den Speicher dann wieder freigeben kann.

    Vielen Dank.

    Gruß
    Steffen



  • Steffenn schrieb:

    Ich erstelle eine dynamische Liste.
    Die Elemente der Liste hole ich mir mit "new Listenelement". Dann wird mit der Liste gearbeitet. Die Liste wird in mehreren Funktionen verwendet und bearbeitet. Damit ich nicht immer die Zeiger usw. übergeben muss, habe ich einen globalen zeiger "anfang_liste". Durch diesen kann ich dann in jeder Funktion auf den Anfang der Liste zurückgreifen.

    Klingt nach extrem beschissenen Design

    Steffenn schrieb:

    Nun zu meinem Problem. Ich möchte nun die Liste lösche, also den Speicher frei geben. Das geht ja mit delete. Allerdings funktioniert das nicht, wenn ich z.B. "delete anfang_liste;". Da gibt es immer Fehler.

    ARGHHHH!!!!!!!!!
    Es wäre nett, wenn du auch noch mitteilen könntest, welcher Fehler das ist.

    Steffenn schrieb:

    WÄre toll, wenn mir da jemand helfen könnte und weiß, wie man den Speicher dann wieder freigeben kann.

    Kann aber keiner, da du nicht sagst, welchen Fehler du hast.

    Wie du den Speicher freigibst: ganz einfach:

    void freeList (Node * node)
    {
       if (node != 0) {
          freeList (node->next);
          delete node;
       }
    }
    

    Ende der Liste muss nicht freigegeben werden, den Rest einfach rekursiv freigeben, was am meisten Sinn macht, da es ja eine rekursive Struktur ist.



  • @edit zu langsam



  • Helium schrieb:

    void freeList (Node * node)
    {
       if (node != 0) {
          freeList (node);
          delete node;
       }
    }
    

    Moment, da versuchst du ja immer das selbe Element zu loeschen. Das gibt ne Endlosschleife!



  • Ups, Danke.

    Sollte natürlich
    freeList (node->next);
    sein.



  • vielleicht hast du anfang_liste nicht als zeiger deklariert? damit wir dir genaueres sagen können mußt du deinen programmquelltext hier posten.


Anmelden zum Antworten