free Liste



  • Hallo,
    ich bräuchte dringend mal nen Tipp wie man ne einfach verkettete Liste free setzt. Mein Versuch:

    void deleteCompleteList ()
    {
      struct list *runner;
      runner = start;
      while(runner != NULL)
      {
        free(runner);
    	runner = runner -> next;
      }
    }
    

    Start ist der globale Headpointer der Liste.
    Leider liefert dieser Code nen seg fault...



  • {
        free(runner);
        runner = runner -> next;
      }
    }
    

    du free()'st und greifst danach auf den gefreed()'ten pointer zu :xmas1:



  • Oh ja, jetzt wo dus sagst. Is klar, dass das nur Müll werden kann.
    D.h. ich muss immer das Element vor dem Pointer runner freen?



  • config schrieb:

    Oh ja, jetzt wo dus sagst. Is klar, dass das nur Müll werden kann.
    D.h. ich muss immer das Element vor dem Pointer runner freen?

    mach einfach eine extra funktion delete_current_head() die dir den aktuellen kopf der liste löscht, vorher aber den globalen head auf den nächsten listenmember setzt, wenn dieser nicht existiert dann head = 0; dann musst du delete_current_head() eben solange aufrufen bis head == 0 ist :xmas1:



  • Klingt selbst für mich verständlich. Ich hätts jetzt wieder maximal kompliziert gemacht. Danke. 🙂



  • Funktioniert jetzt alles super. Danke für den Hinweis! :xmas1:


Anmelden zum Antworten