🧠Gestion de la mémoire en C++ : pointeurs, références et allocation dynamique
1ere
Chapitre 1 / 425%
🏠
Adresses et variables
La mémoire : une ville d'adresses
Chaque variable en C++ est stockée dans la mémoire vive (RAM) à un emplacement précis, appelé adresse mémoire. Imaginez la mémoire comme une immense ville : chaque maison (case mémoire) a une adresse unique, et la variable est l'habitant. Pour connaître l'adresse d'une variable, on utilise l'opérateur & (esperluette). Par exemple, si on a int age = 16; alors &age donne l'adresse où est stocké 16. Comprendre les adresses est essentiel pour manipuler directement la mémoire.
📢 Rappel
Une variable est un espace nommé en mémoire qui contient une valeur.
📖 Définition
L'adresse mémoire est l'emplacement physique (ou logique) où est stockée une variable.
🔍 Exemple
int age = 16; cout << &age; affiche l'adresse hexadécimale de la variable age.
💡 À retenir : Une variable vit à une adresse mémoire unique, comme vous vivez à une adresse postale.
Complète la phrase
Pour obtenir l'adresse d'une variable x, on utilise l'opérateur .
👉
Les pointeurs
Pointeurs : des variables qui stockent des adresses
Un pointeur est une variable spéciale qui, au lieu de contenir une valeur directe, contient l'adresse d'une autre variable. On le déclare avec une étoile * : par exemple, int* p; déclare un pointeur vers un entier. Pour lui assigner l'adresse d'une variable, on utilise l'opérateur & : p = &age;. Pour accéder à la valeur pointée, on utilise l'opérateur de déréférencement * : *p donne la valeur de age. Attention : un pointeur non initialisé peut pointer n'importe où, ce qui est dangereux.
📖 Définition
Un pointeur est une variable dont la valeur est une adresse mémoire.
🔍 Exemple
int age = 16; int* p = &age; cout << *p; // affiche 16
⭐ À retenir
Toujours initialiser un pointeur avant de l'utiliser, sinon comportement indéfini.
💡 À retenir : Un pointeur est comme un papier sur lequel on écrit l'adresse d'une maison : il indique où trouver la variable.
🔗
Les références
Références : des alias pratiques
Une référence est un autre nom pour une variable déjà existante. On la déclare avec le symbole & après le type : int& ref = age; fait de ref un alias de age. Contrairement aux pointeurs, une référence doit être initialisée dès sa déclaration et ne peut pas être réaffectée pour référencer une autre variable. Modifier ref modifie directement age, car c'est la même case mémoire. Les références sont plus sûres que les pointeurs car elles ne peuvent pas être nulles.
📖 Définition
Une référence est un alias (un autre nom) pour une variable existante.
🔍 Exemple
int a = 5; int& b = a; b = 10; // maintenant a vaut aussi 10
⭐ À retenir
Une référence doit être initialisée à la déclaration et ne peut pas être réaffectée.
💡 À retenir : Une référence est un surnom : si vous appelez quelqu'un par son surnom, vous parlez à la même personne.
🧠
Allocation dynamique
new et delete : gérer la mémoire soi-même
Parfois, on ne connaît pas à l'avance la quantité de mémoire nécessaire, par exemple pour stocker une liste dont la taille dépend de l'utilisateur. L'allocation dynamique permet de réserver de la mémoire pendant l'exécution avec l'opérateur new. new renvoie un pointeur vers la mémoire allouée sur le tas (heap). Quand on n'a plus besoin de cette mémoire, il faut la libérer avec delete pour éviter les fuites mémoire. Une fuite mémoire se produit quand on perd l'adresse sans libérer, la mémoire reste occupée jusqu'à la fin du programme.
📖 Définition
Le tas (heap) est la zone de mémoire pour l'allocation dynamique, gérée manuellement.
🔍 Exemple
int* p = new int; *p = 42; cout << *p; delete p; // libère la mémoire
⭐ À retenir
Chaque new doit être suivi d'un delete correspondant pour éviter les fuites mémoire.
💡 À retenir : new réserve de la mémoire sur le tas, et delete la libère : c'est un contrat à respecter.