Leçon 39 : Gestion dynamique de la mémoire : realloc() et free()
Une bonne gestion de la mémoire implique à la fois l'allocation et la libération.
3. free() (Libération de la mémoire)
Libère la mémoire allouée dynamiquement et la rend au tas, évitant ainsi les fuites de mémoire. Vous devez appeler free() exactement une fois pour chaque appel réussi à malloc, calloc ou realloc.
Syntaxe : free(pointeur_vers_bloc_alloue);
c int *p = (int *) malloc(sizeof(int)); *p = 50;
// Utilisation de la mémoire...
free(p); // Après free(p), p est un pointeur suspendu (il contient encore l'ancienne adresse), // il est donc recommandé de le mettre à NULL. p = NULL;
4. realloc() (Réallocation de mémoire)
Modifie la taille du bloc de mémoire pointé par le pointeur donné. Elle peut soit agrandir, soit réduire le bloc. Le contenu du bloc est préservé jusqu'à la plus petite des deux tailles (ancienne et nouvelle).
Syntaxe : (type *) realloc(ancien_pointeur, nouvelle_taille_en_octets);
c int *donnees = (int *) malloc(5 * sizeof(int)); // Taille initiale 5 // ... remplir les données ...
// Réallouer pour contenir 10 entiers int *temp = (int *) realloc(donnees, 10 * sizeof(int));
if (temp != NULL) { donnees = temp; // Mettre à jour le pointeur vers le nouvel emplacement }
Crucial : Si realloc échoue, elle renvoie NULL mais ne libère pas le bloc d'origine. Assignez toujours le résultat de realloc à un pointeur temporaire au préalable.