L’allocation (réservation) automatique des variables a des inconvénients :
L’allocation dynamique permet de résoudre ces problèmes. La mémoire est allouée à la demande avec la fonction :
void* malloc (size_t taille);
Cette fonction réserve un espace de taille octets et en retourne l’adresse (void*
→ pointeur générique)
<aside>
⚠️ malloc
retourne NULL
en cas d’échec
</aside>
La mémoire allouée peut (doit) être libérée avec la fonction :
void free(void *ptr);
<aside> ☝ Penser à inclure stdlib.h pour utiliser malloc de manière implicite.
</aside>
struct Point {
int x;
int y;
};
struct Point *ptr_point;
ptr_point = malloc(sizeof(struct Point));
if (ptr_point != NULL){
// utilisation de ptr_point : (*ptr_point).x;
// idem à ptr_point -> x
free(ptr_point);
}
<aside>
💡 sizeof
retourne la taille nécessaire a allouer pour
</aside>
int *tab = malloc(47232 *sizeof(int));
// tableau de 47232 entiers
if (tab == NULL){
printf("Erreur \\n");
exit(n);
}
// utilisation de tab[0]...tab[47231]
free(tab);