[Παίζει μουσική]
>> DOUG LLOYD: Εντάξει έτσι μια πρόταση πριν από την έναρξη εδώ.
Αν δεν έχετε παρακολουθήσει το βίντεο Δείκτες ίσως να θέλετε να το κάνετε αυτό πρώτα.
Επειδή αυτό το βίντεο είναι ένα άλλο τρόπο εργασίας με δείκτες.
>> Έτσι, πρόκειται να μιλήσω σχετικά με ορισμένες έννοιες
ότι έχουμε καλύψει το Δείκτες βίντεο, και είμαστε
πρόκειται να αποσιωπήσει τους τώρα, υποθέτοντας ότι είναι ήδη
είδος κατανοητό.
Έτσι, αυτό είναι μόνο δίκαιη προειδοποίηση σας ότι, αν βλέπετε αυτό το βίντεο
και δεν έχετε δει το Δείκτες βίντεο, θα μπορούσε το είδος του
πετούν πάνω από το κεφάλι σας λίγο.
Και έτσι θα μπορούσε να είναι καλύτερο για να το δείτε σε αυτή τη σειρά.
>> Έτσι, έχουμε ήδη δει ένα τρόπος για να συνεργαστεί με τους δείκτες,
η οποία είναι μια δηλώνουμε μεταβλητή, και στη συνέχεια
δηλώνουν μια άλλη μεταβλητή, ένα δείκτη μεταβλητή, που δείχνει σ 'αυτό.
Έτσι έχουμε δημιουργήσει μια μεταβλητή με όνομα, έχουμε
δημιούργησε μια δεύτερη μεταβλητή με όνομα, και επισημαίνουμε ότι η δεύτερη μεταβλητή
σε αυτό το πρώτο.
Αυτό το είδος της έχει πρόβλημα όμως, επειδή
απαιτεί από εμάς να γνωρίζουμε ακριβώς πόση μνήμη είμαστε
θα χρειαστούν τη στιγμή το πρόγραμμά μας έχει μεταγλωττιστεί.
>> Γιατί αυτό?
Επειδή πρέπει να είμαστε σε θέση να αναφέρουμε ή τον εντοπισμό όλων των πιθανών μεταβλητών
ενδέχεται να συναντήσουν.
Μπορεί να έχουμε έναν πίνακα που θα μπορούσε να μπορεί να συγκρατήσει πολλές πληροφορίες,
αλλά δεν είναι ακόμα ακριβώς αρκετά ακριβείς.
Τι θα συμβεί αν δεν γνωρίζουμε, Τι κι αν δεν έχουμε ιδέα
πόσο θα χρειαστεί κατά τη μεταγλώττιση;
Ή τι θα γινόταν αν το πρόγραμμά μας θα τρέξει για ένα πραγματικά μεγάλο χρονικό διάστημα,
αποδεχόμενοι τις διάφορες χρήστης δεδομένων, και δεν μπορούμε πραγματικά
να εκτιμήσουν κατά πόσον είμαστε Θα χρειαστεί 1.000 μονάδες;
>> Δεν είναι όπως μπορούμε δηλαδή στη γραμμή εντολών
εισάγετε πόσα στοιχεία νομίζετε ότι θα χρειαστείτε.
Λοιπόν τι θα γινόταν αν η εικασία είναι λάθος;
Δυναμική κατανομή μνήμης είδος μας επιτρέπει το δρόμο
για να πάρει γύρω από αυτό το συγκεκριμένο πρόβλημα.
Και ο τρόπος που το κάνει είναι με τη χρήση δεικτών.
>> Μπορούμε να χρησιμοποιήσουμε δείκτες για να αποκτήστε πρόσβαση σε δυναμικά
κατανεμημένη μνήμη, μνήμη που είναι κατανέμονται ως πρόγραμμα τρέχει.
Δεν είναι κατανέμονται κατά τη διάρκεια της μεταγλώττισης.
Όταν δυναμικά διαθέσει μνήμη προέρχεται από μια πισίνα
της μνήμης είναι γνωστή ως του σωρού.
Προηγουμένως όλη η μνήμη έχουμε εργάζονται με κατά τη διάρκεια
έχει προέρχεται από μια πισίνα της μνήμης είναι γνωστή ως στοίβα.
Ένας καλός τρόπος για να γένει κρατήσει σε mind-- και αυτόν τον κανόνα
δεν είναι πάντα θα ισχύει, αλλά λίγο πολύ σχεδόν
πάντα κρατά true-- είναι ότι κάθε φορά που θα δώσει ένα όνομα μεταβλητής που
πιθανώς ζει στη στοίβα.
Και κάθε φορά που δεν δώσει μια μεταβλητή ένα όνομα,
που μπορείτε να κάνετε με δυναμική μνήμη κατανομή, ζει στο σωρό.
>> Τώρα είμαι το είδος της παρουσίασης, όπως αυτό Αν υπάρχουν αυτά τα δύο πισίνες της μνήμης.
Αλλά μπορεί να έχετε δει αυτό διάγραμμα, το οποίο είναι γενικά
μια αναπαράσταση της ποια μνήμη μοιάζει,
και εμείς δεν πρόκειται να νοιάζονται για όλα τα πράγματα στην κορυφή και στο κάτω μέρος.
Τι μας νοιάζει είναι αυτό το μέρος σε η μέση εδώ, σωρού και στοίβα.
Όπως μπορείτε να δείτε από κοιτάζοντας αυτό το διάγραμμα,
αυτά στην πραγματικότητα δεν είναι δύο χωριστές πισίνες της μνήμης.
Είναι ένα κοινό απόθεμα μνήμης όπου μπορείτε να ξεκινήσετε, σε αυτή την οπτική
που ξεκινούν από τη βάση και να αρχίσει να γεμίζει
από το κάτω μέρος με τη στοίβα, και ξεκινούν από την κορυφή και να αρχίσει να γεμίζει
από πάνω προς τα κάτω με το σωρό.
Αλλά πραγματικά είναι η ίδια πισίνα, είναι ακριβώς
διαφορετικά σημεία, διαφορετικές θέσεις στη μνήμη που έχει εκχωρηθεί.
Και μπορείτε να ξεμείνει από μνήμη είτε με
ο σωρός να πάει όλος ο τρόπος προς τα κάτω, ή να έχουν
η στοίβα πάνε όλα το δρόμο προς την κορυφή, ή με το σωρό και τη στοίβα
συναντήσει ένας εναντίον του άλλου.
Όλα αυτά μπορεί να είναι προϋποθέσεις που προκαλούν το πρόγραμμά σας
να ξεμείνει από μνήμη.
Έτσι κρατήστε αυτό κατά νου.
Όταν μιλάμε για ο σωρός και η στοίβα
είμαστε πραγματικά μιλάμε για το ίδια γενική κομμάτι της μνήμης, απλά
διαφορετικά τμήματα της εν λόγω μνήμης.
>> Επομένως, πώς θα πάρει δυναμικά μνήμης που έχει εκχωρηθεί στην πρώτη θέση;
Πώς να πάρετε το πρόγραμμά μας μνήμη καθώς τρέχει;
Καλά C παρέχει μια λειτουργία που ονομάζεται malloc, εκχώρησης μνήμης, η οποία
μπορείτε να πραγματοποιήσετε μια κλήση, ενώ μπορείτε και να περάσει σε πόσα bytes της μνήμης που θέλετε.
Έτσι, αν το πρόγραμμά σας τρέχει και θέλετε ένα runtime ακέραιο,
ίσως Mallock τέσσερα byte μνήμη, malloc τέσσερις παρενθέσεις.
>> Mallock θα περάσει κοιτάζοντας μέσα από το σωρό,
επειδή είμαστε δυναμικά την κατανομή της μνήμης,
και θα επιστρέψει σε σας ένας δείκτης σε αυτή την μνήμη.
Δεν σας δώσει ότι memory-- δεν δώσει ένα όνομα,
σας δίνει ένα δείκτη σε αυτό.
Και έτσι γι 'αυτό είπα και πάλι ότι είναι σημαντικό να ίσως
έχουν παρακολουθήσει το βίντεο δείκτες πριν φτάσουμε πολύ μακριά σε αυτό.
Έτσι malloc πρόκειται να να σας δώσει πίσω ένα δείκτη.
>> Αν Mallock δεν μπορεί να σας δώσει οποιαδήποτε μνήμης, επειδή έχετε τρέξει έξω,
αυτό θα σας δώσει πίσω ένα κενό δείκτη.
Θυμάστε τι θα συμβεί αν δοκιμάστε και dereference ένα κενό δείκτη;
Έχουμε υποστεί βλάβη SEG, σωστά;
Αυτό ίσως δεν είναι καλό.
>> Έτσι, κάθε φορά που κάνετε μια κλήση να σας malloc πάντα, πάντα
πρέπει να ελέγξει κατά πόσον ή όχι η pointer που σας έδωσε πίσω είναι άκυρη.
Αν είναι, θα πρέπει να τερματίσετε το πρόγραμμα σας γιατί αν προσπαθήσετε και dereference
η μηδενική δείκτης θα πάμε να υποστούν ένα σφάλμα κατάτμησης
και το πρόγραμμα σας είναι έτοιμο να εκραγεί έτσι κι αλλιώς.
Πώς, λοιπόν, εμείς στατικά αποκτήσει έναν ακέραιο;
>> int x.
Πιθανώς Έχουμε κάνει ότι ένα μάτσο φορές, σωστά;
Αυτό δημιουργεί μια μεταβλητή που ονομάζεται x που ζει στη στοίβα.
Πώς παίρνουμε δυναμικά έναν ακέραιο;
Int px αστέρων ισούται με malloc 4.
>> Ή πιο σωστά θα λέγαμε px int αστέρων
ισούται με malloc μέγεθος του int, απλά για να ρίξει κάποια λιγότερα
μαγικοί αριθμοί γύρω από το πρόγραμμά μας.
Αυτό πρόκειται να λάβουν για εμάς τέσσερα bytes της μνήμης από το σωρό,
και ο δείκτης παίρνουμε Επιστροφή στην λέγεται px.
Και τότε ακριβώς όπως έχουμε έχουμε κάνει στο παρελθόν
μπορεί να dereference px πρόσβαση σε αυτή την μνήμη.
Πώς θα πάρετε έναν ακέραιο από το χρήστη;
Μπορούμε να πούμε int x ισούται με πάρει int.
Αυτό είναι αρκετά απλή.
Τι γίνεται αν θέλουμε να δημιουργήσουμε μια σειρά Χ άρματα που ζουν στη στοίβα;
επιπλέουν stack_array-- αυτό είναι το όνομα της array-- αγκύλες μας χ.
Αυτό θα δημιουργήσει για μας μια σειρά Χ άρματα που ζουν στη στοίβα.
Μπορούμε να δημιουργήσουμε μια σειρά από άρματα ότι ζει στο σωρό, πάρα πολύ.
Η σύνταξη μπορεί να μοιάζει μια λίγο πιο περίπλοκη,
αλλά μπορούμε να πούμε με πλωτήρα heap_array αστέρι ισούται
malloc x φορές το μέγεθος του πλωτήρα.
Χρειάζομαι αρκετό χώρο για να κρατήσει x τιμές κινητής υποδιαστολής.
Έτσι λένε ότι χρειάζονται 100 πλωτήρες, ή 1.000 άρματα.
Έτσι, σε αυτή την περίπτωση, θα ήταν 400 bytes για 100 άρματα,
ή 4.000 bytes για 1.000 άρματα, γιατί κάθε πλωτήρα καταλαμβάνει
τέσσερα byte του χώρου.
>> Μετά από αυτό μπορώ να χρησιμοποιήσω το πλατεία σύνταξη βραχίονα heap_array.
Ακριβώς όπως θα ήθελα για stack_array, Ι μπορούν να έχουν πρόσβαση τα στοιχεία του ξεχωριστά
χρησιμοποιώντας heap_array μηδέν, heap_array μία.
Αλλά υπενθυμίζουν το λόγο μπορούμε να το κάνουμε αυτό είναι επειδή το όνομα ενός πίνακα σε C
Είναι πραγματικά ένας δείκτης για το πρώτο στοιχείο που συστοιχίας.
Έτσι, το γεγονός ότι είμαστε ένας δηλώνοντας σειρά αρμάτων στη στοίβα εδώ
είναι στην πραγματικότητα λίγο παραπλανητικό.
Είμαστε πραγματικά στην δεύτερη γραμμή του κώδικα εκεί
δημιουργώντας επίσης ένα δείκτη σε ένα μεγάλο κομμάτι μνήμης που τότε κάνουμε κάποια εργασία με.
>> Εδώ είναι το μεγάλο πρόβλημα με το κατανέμονται δυναμικά μνήμη όμως,
και αυτός είναι ο λόγος για τον οποίο είναι πραγματικά σημαντικό να αναπτυχθούν κάποιες καλές συνήθειες
όταν εργάζεστε με αυτό.
Σε αντίθεση με στατικά δηλωθεί μνήμη, η μνήμη σας
Δεν επιστρέφει αυτόματα στην όταν η λειτουργία του συστήματος σας γίνεται.
Έτσι, αν έχουμε κύρια, και κύρια καλεί μια συνάρτηση
f, όπου το f τελειώνει ό, τι κάνει και επιστρέφει τον έλεγχο του προγράμματος
πίσω στην κύρια, το σύνολο της μνήμης ότι η f χρησιμοποιείται δίνεται πίσω.
Μπορεί να χρησιμοποιηθεί ξανά από κάποιο άλλο πρόγραμμα,
ή κάποια άλλη λειτουργία που φώναξαν αργότερα στην κύρια.
Μπορεί να χρησιμοποιήσει την ίδια τη μνήμη ξανά.
>> Αν δυναμικά εκχώρηση μνήμης αν
έχετε να πείτε ρητά η σύστημα που θα τελειώσετε με αυτό.
Θα κρατήσουν για σας, η οποία θα μπορούσε να οδηγήσει σε ένα πρόβλημα που εξαντλείται
της μνήμης.
Και στην πραγματικότητα, μερικές φορές αναφερόμαστε σε αυτό ως μια διαρροή μνήμης.
Και ενίοτε αυτές οι διαρροές μνήμης μπορεί πραγματικά να είναι πραγματικά καταστροφικό
για την απόδοση του συστήματος.
>> Αν είστε συχνός χρήστης του Διαδικτύου μπορείτε να χρησιμοποιήσετε ορισμένα προγράμματα περιήγησης στο Web,
και εγώ δεν θα αναφέρω ονόματα εδώ, αλλά υπάρχουν μερικά web browser εκεί έξω
που είναι διαβόητη για την πραγματικότητα που έχει διαρροές μνήμης που δεν διορθώνονται.
Και εάν αφήσετε το πρόγραμμα περιήγησης ανοικτό για ένα πολύ μεγάλο χρονικό διάστημα, ημέρα
και ημέρες, εβδομάδες ή, μερικές φορές μπορεί να παρατηρήσετε ότι το σύστημά σας
τρέχει πραγματικά, πραγματικά αργά.
Και ο λόγος για αυτό είναι ότι το πρόγραμμα περιήγησης έχει διαθέσει μνήμης,
αλλά στη συνέχεια δεν είπε το σύστημα ότι έχει κάνει με αυτό.
Και έτσι ώστε να αφήνει λιγότερη μνήμη διαθέσιμες για όλα τα άλλα προγράμματα σας
να πρέπει να μοιραστεί, επειδή είστε leaking-- που ο web browser
το πρόγραμμα έχει διαρροή μνήμης.
Πώς μπορούμε να δώσουμε πίσω τη μνήμη όταν τελειώσουμε με αυτό;
Καλά ευτυχώς είναι μια πολύ εύκολος τρόπος για να το κάνουμε.
Εμείς απλά το απελευθερώσει.
Υπάρχει μια λειτουργία που ονομάζεται δωρεάν, δέχεται ένα δείκτη στη μνήμη,
και είμαστε καλοί να πάτε.
>> Ας πούμε ότι είμαστε στη μέση του προγράμματός μας,
θέλουμε να malloc 50 χαρακτήρων.
Θέλουμε να malloc έναν πίνακα που μπορεί να μπορεί να χωρέσει 50 χαρακτήρων.
Και όταν παίρνουμε ένα δείκτη πίσω στο ότι, όνομα αυτού του δείκτη είναι η λέξη.
Εμείς κάνουμε ό, τι είμαστε πρόκειται να κάνει με το λόγο,
και στη συνέχεια, όταν είμαστε κάνει απλά το απελευθερώσει.
Και τώρα έχουμε επιστρέψει τα εν λόγω 50 bytes της μνήμης πίσω στο σύστημα.
Κάποια άλλη λειτουργία μπορούν να τα χρησιμοποιήσουν.
Δεν χρειάζεται να ανησυχείτε για την ταλαιπωρία ένα διαρροή μνήμης, επειδή έχουμε απελευθερωθεί λέξη.
Έχουμε δεδομένη τη μνήμη πίσω, έτσι ώστε να τελειώσετε την εργασία με αυτό.
Έτσι, υπάρχουν τρεις χρυσούς κανόνες που θα πρέπει
να έχουμε κατά νου όταν είστε δυναμική εκχώρηση μνήμης
με malloc.
Κάθε μπλοκ μνήμης που Σας malloc πρέπει να απελευθερωθεί
πριν από το πρόγραμμά σας ολοκληρωθεί η εκτέλεση.
Τώρα πάλι, στη συσκευή ή στο IDE αυτό το είδος της συμβαίνει για σας ούτως ή άλλως
όταν you-- αυτό θα συμβεί ούτως ή άλλως όταν το πρόγραμμα σας τερματίζεται,
όλη η μνήμη θα κυκλοφορήσει.
Αλλά είναι γενικά καλή κωδικοποίηση πρακτικής για πάντα, όταν τελειώσετε,
ελευθερώσει τι έχετε mallocd.
>> Τούτου λεχθέντος, μόνα πράγματα που έχετε mallocd πρέπει να απελευθερωθούν.
Αν στατικά δηλώνουν μια ακέραιος, int x άνω τελεία,
ότι ζει στη στοίβα, μπορείτε τότε δεν θέλετε να ελευθερώσετε x.
Έτσι, μόνο τα πράγματα που έχετε mallocd θα πρέπει να απελευθερωθεί.
>> Και τέλος, δεν κάνουμε κάτι δωρεάν δύο φορές.
Αυτό μπορεί να οδηγήσει σε ένα άλλο παράξενο κατάσταση.
Έτσι, όλα αυτά που έχετε mallocd πρέπει να ελευθερωθεί.
Μόνο πράγματα που έχετε malloc θα πρέπει να απελευθερωθεί.
Και δεν κάνουμε κάτι δωρεάν δύο φορές.
>> Ας πάμε μέσα από ένα παράδειγμα εδώ από ό, τι ορισμένοι κατανέμονται δυναμικά
μνήμης μπορεί να μοιάζει με μικτό με κάποια στατική μνήμη.
Τι θα μπορούσε να συμβεί εδώ;
Δείτε αν μπορείτε να ακολουθήσετε μήκος και μαντέψτε τι είναι
πρόκειται να συμβεί καθώς προχωράμε σε όλες αυτές τις γραμμές κώδικα.
>> Έτσι λέμε int m.
Τι συμβαίνει εδώ;
Λοιπόν αυτό είναι αρκετά απλή.
Έχω δημιουργήσει μια μεταβλητή που ονομάζεται ακέραιο m.
Έχω χρώμα πράσινο, γιατί αυτό είναι το χρώμα
ότι χρησιμοποιώ όταν μιλώ σχετικά με ακέραιες μεταβλητές.
Είναι ένα κουτί.
Αυτό λέγεται m, και μπορείτε να κατάστημα ακέραιοι στο εσωτερικό του.
>> Τι θα συμβεί εάν στη συνέχεια να πω ένα αστέρι int;
Λοιπόν αυτό είναι αρκετά παρόμοια.
Είμαι δημιουργώντας ένα κουτί που ονομάζεται.
Είναι σε θέση να συγκρατήσει int αστέρια, δείκτες σε ακέραιους αριθμούς.
Έτσι είμαι χρωματισμό πράσινο-ish, όπως καλά.
>> Ξέρω ότι έχει κάτι να κάνει με ένα ακέραιο,
αλλά η ίδια δεν είναι ένας ακέραιος αριθμός.
Αλλά είναι λίγο πολύ η ίδια ιδέα.
Έχω δημιουργήσει ένα κουτί.
Και οι δύο αυτές δικαιώματος τώρα ζουν στη στοίβα.
Έχω δώσει και τα δύο ονόματα.
>> int αστέρι β ισούται με malloc μέγεθος του int.
Αυτό θα μπορούσε κανείς να είναι λίγο δύσκολο.
Πάρτε μια δεύτερη και σκεφτείτε τι θα περίμενε κανείς να συμβεί σε αυτό το διάγραμμα.
int αστέρι β ισούται με malloc μέγεθος του int.
>> Καλά αυτό δεν είναι μόνο να δημιουργήσει ένα πλαίσιο.
Αυτή η πραγματικότητα δημιουργεί δύο κουτιά.
Και δένει, θεσπίζει επίσης ένα σημείο σε μια σχέση.
Έχουμε διατεθεί ένα τετράγωνο της μνήμης στο σωρό.
Παρατηρήστε ότι το πάνω δεξιά παράθυρο εκεί δεν έχει όνομα.
>> Εμείς mallocd.
Υπάρχει στο σωρό.
Αλλά η Β έχει ένα όνομα.
Είναι μια μεταβλητή δείκτη που ονομάζεται β.
Που ζει στη στοίβα.
>> Γι 'αυτό είναι ένα κομμάτι της μνήμης επισημαίνει ότι σε μια άλλη.
β περιέχει τη διεύθυνση του εν λόγω μπλοκ της μνήμης.
Δεν έχει άλλο ένα όνομα.
Αλλά επισημαίνει σε αυτό.
Έτσι, όταν λέμε int αστέρι β ισούται με το μέγεθος της malloc int, ότι ακριβώς εκεί,
ότι το βέλος που έσκασε επάνω του δεξιά εκεί, όλο αυτό το πράγμα,
Θα πρέπει να εμφανιστεί και πάλι, είναι ό, τι συμβαίνει.
Όλα αυτά συμβαίνουν σε ότι ούτε μία γραμμή κώδικα.
Τώρα θα πάρει λίγο περισσότερο απλή και πάλι.
ισούται με ένα ampersand m.
Θυμάστε τι μια ισούται με εμπορικό και το m είναι;
Καλά αυτός είναι ένας παίρνει τη διεύθυνση του χρήστη m.
Ή να τεθούν πιο διαγραμματικά, ένα σημεία στο m.
>> α ισούται με b.
Εντάξει έτσι εδώ είναι ένα άλλο.
Α ισούται με b.
Τι πρόκειται να συμβεί στο διάγραμμα αυτή τη φορά;
>> Καλά υπενθυμίζουν ότι η έργα τελεστή εκχώρησης
αναθέτοντας την τιμή για το δικαίωμα στην τιμή στα αριστερά.
Έτσι, αντί ενός που δείχνουν στο m, ένα τώρα επισημαίνει στην ίδια θέση που β πόντους.
α δεν φαίνεται να υποδηλώνουν b, a σημεία όπου β πόντους.
>> Αν ένα μυτερό στο B, το οποίο θα Έχουν μια ισούται εμπορικό και β.
Αλλά αντ 'αυτού ένα ισούται με b μόνο σημαίνει ότι και b είναι τώρα
που δείχνουν προς την ίδια διεύθυνση, επειδή στο εσωτερικό του b είναι απλώς μια διεύθυνση.
Και τώρα στο εσωτερικό του ένα είναι η ίδια διεύθυνση.
m ισούται με 10, πιθανώς το πιο απλό πράγμα
έχουμε κάνει σε λίγο.
Βάλτε το 10 στο κουτί.
Αστέρι β ισούται με m συν 2, ανάκληση από τους μας δείκτες βίντεο τι σημαίνει β αστέρων.
Εμείς πάμε για να dereference β και πώλησης κάποια αξία σε αυτή τη θέση μνήμης.
Σε αυτή την περίπτωση 12.
>> Έτσι όταν dereference ένα σημείο Υπενθυμίζουμε απλά ταξιδεύουν κάτω από το βέλος.
Ή με άλλα λόγια, εμείς μεταβεί στη συγκεκριμένη διεύθυνση μνήμης
και θα το χειριστείτε με κάποιο τρόπο.
Βάλαμε κάποια αξία εκεί.
Σε αυτή την περίπτωση β αστέρων ισούται με m συν 2 είναι ακριβώς
πηγαίνετε στην μεταβλητή που υποδεικνύεται από β, πηγαίνετε στη μνήμη που υποδεικνύεται από β,
και να θέσει m συν 2 εκεί, 12.
>> Τώρα μπορώ να ελευθερώσετε β.
Τι συμβαίνει όταν η ελεύθερη β;
Θυμηθείτε τι είπα δωρεάν μέσα.
Τι λέω όταν θα απελευθερώσει β;
>> Έχω ολοκληρώσει την εργασία με αυτό, έτσι δεν είναι;
Έχω κατ 'ουσίαν, να εγκαταλείψει τη μνήμη.
Δίνω πίσω στο σύστημα.
Δεν χρειάζομαι αυτό πια είναι αυτό που τους λέω, εντάξει;
>> Τώρα, αν πω ένα αστέρι ισούται με 11 μπορείτε πιθανώς
ήδη πει ότι κάτι κακό πρόκειται να συμβεί εδώ, σωστά;
Και πράγματι, αν προσπάθησα ότι πιθανώς θα υποστούν ένα σφάλμα κατάτμησης.
Γιατί τώρα, αν και προηγουμένως ότι κομμάτι της μνήμης
ήταν κάτι που είχα πρόσβαση σε, στο σημείο αυτό
τώρα είμαι πρόσβαση μνήμης που Δεν είναι νόμιμο για μένα να έχουν πρόσβαση.
>> Και όπως πιθανότατα θα Υπενθυμίζουμε, όταν έχουμε πρόσβαση στη μνήμη
ότι δεν είμαστε υποτιθέμενοι για να αγγίξει, αυτή είναι η πιο κοινή αιτία
της τμηματοποίησης κατηγορήσω. Και έτσι το πρόγραμμά μου
θα συντριβή αν προσπάθησα να το κάνετε αυτό.
Έτσι και πάλι είναι μια καλή ιδέα για να πάρει καλό πρακτικές και συνήθειες βαθιά ριζωμένες καλό
όταν εργάζεστε με malloc και δωρεάν, έτσι ώστε να μην υποφέρουν τμηματοποίηση
σφάλματα, και ότι μπορείτε να χρησιμοποιήσετε σας δυναμικά διατίθενται
μνήμη υπεύθυνα.
>> Είμαι Doug Lloyd αυτό είναι CS50.