Δημοσιεύτηκε: 08 Ιούλ 2011, 11:40
Star_Light έγραψε:
[snip]
εκανα αυτες τις αλλαγες... ρε συ εμενα το προγραμμα τωρα μου τρεχει κανονικα... εμφανιζει 12 (κολλημενα βεβαια ακομη και αν βαζω \n \t)
μπορει να κουραζεσαι να λες τα ιδια και τα ιδια αλλα πως θα δω αν ο δεικτης εχει ελευθερωθει??? δεν πρεπει να τον συγκρινω με NULL??? Μετα την free να δω αν εκανε καλα την δουλεια της ??? ενα αυτο.
Όπως σου είπα κι εγώ αλλά όπως γράφει και η τεκμηρίωση της free() που βρήκες και μου έδειξες, μετά το free() ο δείκτης ΔΕΝ ισούται με NULL, δείχνει σε έναν κατεστραμμένο κόμβο, που εν πολλοίς σημαίνει πως είναι undefined.
Δεν μπορείς να ελέγξεις που δείχνει ο δείκτης μετά το free(). Η γλώσσα όμως σου εγγυάται πως η free() απελευθερώνει ότι της είπες να απελευθερώσει (αν της δώσεις να απελευθερώσει κάτι που δεν υπάρχει, απλά δεν κάνει τίποτα).
έγραψε:Μετα που μου λες οτι χανω την επαφη με το loop το καταλαβαινω και εχεις δικιο αλλα θα ηθελα να το φτιαξω απλα να καλει την συναρτηση... τελοςπαντων το εκανα με for και ξεμπερδεψα αν και ο δικος σου τροπος ειναι σιγουρα πιο επαγγελματικος....
Απο την αλλη...... βασικα οκ τωρα καταλαβα
ολη την ζημια την εκανε το head=head->next τωρα με το for πιστευω ειναι ενταξει... η δικη σου γνωμη ποια ειναι?????
Π.Σ Αν αντι για την for εβαζα σκετο while με τον head μεσα μετα απο κατω θα επρεπε καπως να τον μετακινω αλλα μου λες πως χανεται η επαφη με την λιστα..... Δεν κοιταξα αλλο τον δικο σου κωδικα γιατι θελω να καταλαβω μονος μου.... απλα διαβαζω αυτα που γραφεις.
Ευχαριστω
Δεν κάνει τη διαφορά το νέο for που έβαλες, αλλά το ότι το τύπωμα της λίστας τώρα το κάνεις καλώντας τη συνάρτηση: list_print (που σημαίνει πως επειδή της περνάς το head by value μετακινεί μέσα της ένα αντίγραφο του head και όχι το αυθεντικό που έχουμε ορίσει στη main() ). Πριν έβαζες μέσα στο for το αυθεντικό head για να τυπώσεις τη λίστα και άρα στο τέλος του for ο αυθεντικός head είχε μετακινηθεί στο τέλος της λίστας (και ήταν προφανώς NULL).