Menu
Coddy logo textTech

Libérer la mémoire avec free()

Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 35 sur 63.

Lorsque vous allouez de la mémoire dynamiquement en utilisant malloc(), cette mémoire reste allouée jusqu'à ce que vous la libériez explicitement. La fonction free() est votre outil pour restituer la mémoire allouée dynamiquement au système lorsque vous avez fini de l'utiliser.

La fonction free() prend un argument : un pointeur vers le bloc de mémoire que vous souhaitez libérer. Cela doit être le même pointeur que celui retourné par malloc() (ou des fonctions apparentées comme calloc()).

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Allouer de la mémoire
*ptr = 42;  // Utiliser la mémoire
free(ptr);  // Libérer la mémoire une fois terminé

Ne pas appeler free() crée ce que l'on appelle une fuite de mémoire. La mémoire allouée reste réservée par votre programme même si vous ne l'utilisez plus. Dans les programmes à exécution longue ou les programmes qui allouent de la mémoire de manière répétée, ces fuites peuvent consommer toute la mémoire système disponible et provoquer des problèmes de performance ou des plantages.

N'oubliez pas : chaque malloc() doit avoir un free() correspondant. Ce couplage est essentiel pour une gestion responsable de la mémoire en programmation C.

challenge icon

Défi

Facile

Écrivez un programme en C qui démontre le cycle de vie complet de l'allocation et de la désallocation dynamique de mémoire. Votre programme doit :

  1. Lire un entier count de l'utilisateur représentant le nombre d'entiers à stocker
  2. Utiliser malloc() avec sizeof() pour allouer dynamiquement de la mémoire pour un tableau de count entiers
  3. Vérifier si l'allocation de mémoire a réussi - si elle échoue, afficher Memory allocation failed! et terminer le programme
  4. Si l'allocation réussit, afficher Memory allocated successfully!
  5. Lire count valeurs entières de l'utilisateur et les stocker dans le tableau alloué
  6. Calculer et afficher la somme de toutes les valeurs au format : Sum: [value]
  7. Trouver et afficher la valeur maximale au format : Maximum: [value]
  8. Utiliser free() pour désallouer la mémoire
  9. Afficher Memory freed successfully! pour confirmer le nettoyage

N'oubliez pas d'inclure l'en-tête <stdlib.h> pour utiliser malloc() et free(). Ce défi démontre l'association essentielle de malloc() et free() pour prévenir les fuites de mémoire dans vos programmes.

Par exemple, si l'entrée est :

4
15 8 23 12

Votre sortie devrait être :

Memory allocated successfully!
Sum: 58
Maximum: 23
Memory freed successfully!

Ce défi renforce le concept critique selon lequel chaque bloc de mémoire alloué dynamiquement doit être correctement libéré lorsqu'il n'est plus nécessaire, complétant ainsi le cycle de gestion responsable de la mémoire en programmation C.

Aide-mémoire

Utilisez free() pour libérer la mémoire qui a été allouée avec malloc() :

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Allouer de la mémoire
*ptr = 42;  // Utiliser la mémoire
free(ptr);  // Libérer la mémoire une fois terminé

Chaque malloc() doit avoir un free() correspondant pour éviter les fuites de mémoire. Le pointeur passé à free() doit être le même pointeur que celui retourné par malloc().

Essayez vous-même

#include <stdio.h>
#include <stdlib.h>

int main() {
    int count;
    
    // Lire le nombre d'entiers à stocker
    scanf("%d", &count);
    
    // À FAIRE : Écrivez votre code ci-dessous
    // 1. Allouer de la mémoire en utilisant malloc() avec sizeof()
    // 2. Vérifier si l'allocation a réussi
    // 3. Lire les valeurs entières et les stocker
    // 4. Calculer la somme et trouver le maximum
    // 5. Libérer la mémoire allouée
    
    return 0;
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logic & Flow