Δημοσιεύτηκε: 06 Ιούλ 2011, 02:55
από migf1
Λοιπόν, άμα σου πως πως δεν μπορώ να συγκεντρωθώ να καταλάβω την εξήγησή σου τι θα μου πεις; Νομίζω πως τα λες σωστά, αλλά είμαι πολυ κουρασμένος για να το εξετάσω συγκεντρωμένα.

Εν τω μεταξύ με μπέρδεψες, γιατί νόμιζα πως πήγαινες να εξηγήσεις την list_destroy() αλλά αυτό που περιγράφεις εσύ είναι η διαγραφή ενός ενδιάμεσου κόμβου.

Η list_destroy() λειτουργεί ως εξής: επειδή όταν καταστρέψεις έναν κόμβο (με free) χάνεις την δυνατότητα να πας στον επόμενο (δεν υπάρχουν πια πεδία, είναι κατεστραμμένος ο κόμβος) πριν τον καταστρέψεις χρησιμοποιείς τον dummy, τον οποίον τον βάζεις να δείξει στον επόμενο κόμβο (dummy = head->next).

Οπότε, τώρα καταστρέφεις τον τρέχων κόμβο ( free(head) ) και με το head = dummy βάζεις τον head να φύγει από τον κατεστραμμένο κόμβο και να πάει σε αυτόν που δείχνει κι ο dummy (δλδ αυτόν που πριν την καταστροφή ήταν ο επόμενος).

Κι επαναλαμβάνεις τη διαδικασία (μέσα στο while) μέχρι ο head να γίνει NULL (οπότε δεν θα μπει στο loop, άρα δεν θα εκτελεστεί και το: dummy = head->next που θα έδινε seg-fault).