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

Α13.6 · Κουίζ: πίνακας 5x5 σε συνάρτηση

Διάλεξη 13, διαφάνειες 61–63 · Δυσκολία ★★☆ · debug · Κεφάλαια: 13

Θέλω να δημιουργήσω έναν πίνακα 5x5. Για καθεμία από τις τρεις υλοποιήσεις, είναι σωστή; Αν όχι, τι πρόβλημα έχει;

Υλοποίηση 1

void bar() {
  int ** array = malloc(5 * sizeof(int*));
  int i;
  for(i = 0 ; i < 5 ; i++)
    array[i] = malloc(5 * sizeof(int));
  // process loop here
}

Υλοποίηση 2

void bar() {
  int ** array = malloc(5 * sizeof(int*));
  if (!array) {
    return;
  }
  int i;
  for(i = 0 ; i < 5 ; i++) {
    array[i] = malloc(5 * sizeof(int));
    if (!array[i]) {
      return;
    }
  }
  // process loop here
}

Υλοποίηση 3

void bar() {
  int ** array = malloc(5 * sizeof(int*));
  if (!array) {
    return;
  }
  int i;
  for(i = 0 ; i < 5 ; i++) {
    array[i] = malloc(5 * sizeof(int));
    if (!array[i]) {
      return;
    }
  }
  // process loop here
  for(i = 0 ; i < 5 ; i++) {
    free(array[i]);
  }
  free(array);
}

Υπόδειξη

Για κάθε malloc ρωτήστε: ελέγχεται για NULL; Αποδεσμεύεται με free σε κάθε δρόμο εξόδου από τη συνάρτηση, και στον κανονικό και σε αυτόν μιας αποτυχίας στη μέση του βρόχου;

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