Οδηγός Μελέτης - Εισαγωγή στον Προγραμματισμό

Α13.1 · Τι γίνεται μετά την free;

Διάλεξη 13, διαφάνειες 47–51 · Δυσκολία ★☆☆ · short-answer · Κεφάλαια: 13

Μάθαμε να δεσμεύουμε μνήμη με την malloc: μας λείπει κάτι;

int * array = malloc(4 * sizeof(int));
if (!array) {
  // fail gracefully
}
free(array);
  1. Τι θα συμβεί στη μνήμη (στη στοίβα και στον σωρό) μετά την free;
  2. Τι θα συμβεί αν προσπαθήσουμε να προσπελάσουμε μνήμη που έχουμε αποδεσμεύσει, π.χ. με array[0] = 4; μετά την free;
  3. Τι θα συμβεί αν προσπαθήσουμε να αποδεσμεύσουμε μνήμη που έχουμε ήδη αποδεσμεύσει, δηλαδή με δεύτερο free(array);;

Υπόδειξη

Ξεχωρίστε τον pointer array (που ζει στη στοίβα) από το μπλοκ στο οποίο δείχνει (στον σωρό): ποιο από τα δύο αλλάζει η free; Για τα 2 και 3, σκεφτείτε τι σημαίνει να χρησιμοποιούμε μνήμη που δεν μας ανήκει πια, στην καλύτερη και στη χειρότερη περίπτωση.

Αριθμός στον οδηγό: Α13.1 (στο κεφάλαιο) · Μόνιμο αναγνωριστικό: slides-lec13-after-free · Σύνδεσμος: https://progintro.github.io/study/questions/slides/slides-lec13-after-free.html · Markdown (GitHub)