-
Η συνάρτηση malloc() μας επιτρέπει να
ζητήσουμε έναν ελεύθερο χώρο μνήμης για να χρησιμοποιήσουμε στο πρόγραμμά μας.
- Η malloc έχει ως όρισμα το μέγεθος της μνήμης που απαιτούμε
και επιστρέφει ένα δείκτη στην αρχή του αντίστοιχου χώρου.
Ο τύπος της τιμής που επιστρέφει δεν είναι αντίστοιχος
με τον τύπο που χρειαζόμαστε και γι' αυτό πρέπει να χρησιμοποιήσουμε
την αντίστοιχη μετατροπή (π.χ. (double *)malloc...).
- Σε περίπτωση που το σύστημα δεν έχει άλλη διαθέσιμη μνήμη
η malloc επιστρέφει τη σταθερά NULL.
Παράδειγμα:
char *c;
c = (char *)malloc(1000 * sizeof(char));
if (c == NULL) {
printf("Out of memory!\n");
return (1);
}
- Με τη χρήση της malloc μπορούμε να δημιουργήσουμε δυναμικά
χώρο για πίνακες τους οποίους δηλώνουμε ως δείκτες.
- Το παρακάτω παράδειγμα ζητάει από το χρήστη να ορίσει το μέγεθος
ενός πίνακα και στη συνέχεια να δώσει τα στοιχεία του.
#include <stdlib.h>
#include <stdio.h>
main()
{
int *int_table; /* Table of integers */
int nelem; /* Number of elements */
int i;
printf("Enter number of elements:");
scanf("%d", &nelem);
int_table = (int *)malloc(nelem * sizeof(int));
for (i = 0; i < nelem; i++) {
printf("Element %d=", i);
scanf("%d", &int_table[i]);
}
}
- Η συνάρτηση free(δείκτης) ελευθερώνει το χώρο που έχει επιστραφεί
από τη malloc για ανακύκλωση.
- Η συνάρτηση realloc(δείκτης, νέο μέγεθος) λαμβάνει ως όρισμα
ένα δείκτη που έχει επιστραφεί από τη malloc και επιστρέφει έναν
δείκτη σε χώρο με το νέο μέγεθος που έχει προσδιοριστεί.
Παράδειγμα:
int *iptr;
iptr = (int *)malloc(10 * sizeof(int));
/* iptr[0] to iptr[9] can now be used */
iptr = (int *)realloc(iptr, 20 * sizeof(int));
/*
* iptr[0] to iptr[9] retain old values
* iptr[0] to iptr[19] can now be used */
*/
free(iptr);
/* Do not access iptr[0] to iptr[19] from this point onwards */
- Οι malloc, free, realloc, NULL ορίζονται στο αρχείο stdlib.h.