Θέλω να δημιουργήσω έναν πίνακα 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)