Menu
Coddy logo textTech

Libérer la mémoire avec free()

Fait partie de la section Logique & Flux du Journey C de Coddy. Leçon 35 sur 63.

Lorsque vous allouez dynamiquement de la mémoire à l’aide de malloc(), cette mémoire reste allouée jusqu’à ce que vous la libériez explicitement. La fonction free() vous permet de restituer au système la mémoire allouée dynamiquement lorsque vous avez fini de l’utiliser.

La fonction free() prend un argument : un pointeur vers le bloc de mémoire que vous souhaitez désallouer. Il doit s’agir du même pointeur que celui renvoyé par malloc() (ou par des fonctions similaires 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 de longue durée 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 entraîner des problèmes de performances ou des plantages.

N’oublie pas : chaque malloc() doit avoir un free() correspondant. Cette association est essentielle pour une gestion responsable de la mémoire en programmation C.

challenge icon

Défi

Facile

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

  1. Lire un entier count auprès 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 auprès 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 libérer 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 montre l’association essentielle de malloc() et free() pour éviter les fuites de mémoire dans vos programmes.

Par exemple, si l’entrée est :

4
15 8 23 12

Votre sortie doit être :

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

Ce défi renforce le concept essentiel selon lequel chaque bloc de mémoire alloué dynamiquement doit être correctement libéré lorsqu’il n’est plus nécessaire, ce qui complète le cycle de gestion responsable de la mémoire en programmation C.

Essayez vous-même

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

int main() {
    int count;
    
    // Lire le nombre d'entiers à stocker
    scanf("%d", &count);
    
    // TODO: É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 Logique & Flux

Entraînez-vous par vous-même : Compilateur C en ligne