Menu
Coddy logo textTech

Libérer la mémoire avec 'delete'

Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 7 sur 56.

Lorsque vous allouez de la mémoire dynamiquement en utilisant new, cette mémoire ne disparaît pas automatiquement lorsque vous avez fini de l'utiliser. Contrairement aux variables classiques qui sont nettoyées automatiquement, la mémoire allouée dynamiquement reste utilisée jusqu'à ce que vous la libériez explicitement. C'est là que le mot-clé delete devient essentiel.

Le mot-clé delete libère la mémoire qui a été précédemment allouée avec new. Lorsque vous utilisez delete, vous indiquez au système que vous avez fini d'utiliser cette mémoire et qu'elle peut être réutilisée à d'autres fins :

int* ptr = new int(42);  // Allouer de la mémoire
// Utiliser la mémoire...
delete ptr;              // Libérer la mémoire

La règle fondamentale de la gestion dynamique de la mémoire est simple : pour chaque new, il doit y avoir un delete correspondant. Si vous oubliez de supprimer la mémoire allouée dynamiquement, vous créez une fuite de mémoire - votre programme continue de conserver de la mémoire qu'il n'utilise plus, ce qui peut finir par épuiser la mémoire disponible de votre système.

Après avoir appelé delete sur un pointeur, ce pointeur devient invalide et ne doit plus être utilisé. C'est une bonne pratique de définir le pointeur sur nullptr après la suppression pour éviter de l'utiliser accidentellement.

challenge icon

Défi

Facile

Créez un programme qui démontre le cycle de vie complet de la mémoire dynamique en allouant de la mémoire avec new, en l'utilisant, puis en la libérant correctement avec delete.

Les entrées suivantes seront fournies :

  • Une valeur entière à stocker dans la mémoire allouée dynamiquement
  • Une deuxième valeur entière pour mettre à jour la valeur stockée

Votre programme doit :

  1. Utiliser new pour allouer dynamiquement de la mémoire pour un entier et stocker le pointeur dans une variable nommée dynamicPtr
  2. Attribuer la première valeur d'entrée à la mémoire allouée dynamiquement en utilisant l'opérateur de déréférencement
  3. Afficher la valeur initiale stockée dans la mémoire allouée dynamiquement
  4. Mettre à jour la valeur dans la mémoire allouée dynamiquement avec la deuxième valeur d'entrée
  5. Afficher la valeur mise à jour
  6. Utiliser delete pour libérer la mémoire allouée dynamiquement
  7. Définir le pointeur sur nullptr après la suppression
  8. Afficher un message de confirmation indiquant que la mémoire a été libérée

Utilisez le format de sortie exact suivant :

Initial value: [first value]
Updated value: [second value]
Memory freed successfully

Aide-mémoire

Le mot-clé delete libère la mémoire qui a été précédemment allouée avec new :

int* ptr = new int(42);  // Allouer de la mémoire
// Utiliser la mémoire...
delete ptr;              // Libérer la mémoire

Pour chaque new, il doit y avoir un delete correspondant pour éviter les fuites de mémoire.

Après avoir appelé delete, définissez le pointeur sur nullptr pour éviter d'utiliser accidentellement de la mémoire invalide :

delete ptr;
ptr = nullptr;

Essayez vous-même

#include <iostream>
using namespace std;

int main() {
    // Lire les valeurs d'entrée
    int firstValue, secondValue;
    cin >> firstValue;
    cin >> secondValue;
    
    // TODO : Écrivez votre code ci-dessous
    // 1. Allouer de la mémoire en utilisant new et stocker dans dynamicPtr
    // 2. Assigner firstValue à la mémoire allouée
    // 3. Afficher la valeur initiale
    // 4. Mettre à jour avec secondValue
    // 5. Afficher la valeur mise à jour
    // 6. Libérer la mémoire et définir le pointeur sur nullptr
    // 7. Afficher le message de confirmation
    
    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 et Flux