Mémoire dynamique avec 'new'
Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 6 sur 56.
Jusqu'à présent, vous avez travaillé avec des pointeurs qui pointent vers des variables déjà créées dans votre programme. Mais que se passe-t-il si vous avez besoin de créer des variables pendant que votre programme est en cours d'exécution ? C'est là que l'allocation dynamique de mémoire avec le mot-clé new devient essentielle.
Le mot-clé new vous permet d'allouer de la mémoire pour une variable sur le tas (heap) pendant l'exécution du programme. Contrairement aux variables classiques qui sont créées sur la pile (stack), la mémoire allouée dynamiquement persiste jusqu'à ce que vous la libériez explicitement.
int* ptr = new int; // Alloue de la mémoire pour un entier
*ptr = 42; // Assigne une valeur à la mémoire allouéeDans cet exemple, new int alloue suffisamment de mémoire pour stocker un entier et retourne un pointeur vers cet emplacement mémoire. Vous pouvez ensuite utiliser l'opérateur de déréférencement pour assigner des valeurs et accéder à la variable allouée dynamiquement tout comme n'importe quel autre pointeur.
L'allocation dynamique de mémoire est particulièrement utile lorsque vous ne savez pas de quelle quantité de mémoire vous aurez besoin avant l'exécution, ou lorsque vous avez besoin que des variables existent au-delà de la portée dans laquelle elles ont été créées. Cette flexibilité fait de new un outil puissant pour construire des programmes plus complexes.
Défi
FacileCréez un programme qui démontre l'allocation dynamique de mémoire en utilisant le mot-clé new pour allouer de la mémoire pour une variable pendant l'exécution du programme.
L'entrée suivante sera fournie :
- Une valeur entière à stocker dans la mémoire allouée dynamiquement
Votre programme doit :
- Utiliser le mot-clé
newpour allouer dynamiquement de la mémoire pour un entier - Stocker le pointeur retourné par
newdans une variable pointeur nomméenumPtr - Utiliser l'opérateur de déréférencement pour assigner la valeur d'entrée à la mémoire allouée dynamiquement
- Afficher la valeur stockée dans la mémoire allouée dynamiquement en déréférençant le pointeur
- Afficher l'adresse mémoire stockée dans le pointeur
Utilisez le format de sortie exact suivant :
Value: [value]
Address: [memory address]L'adresse mémoire sera affichée au format hexadécimal, ce qui correspond à la manière dont le C++ affiche les adresses mémoire pour la mémoire allouée dynamiquement.
Aide-mémoire
Le mot-clé new alloue de la mémoire pour une variable sur le tas (heap) pendant l'exécution du programme :
int* ptr = new int; // Alloue de la mémoire pour un entier
*ptr = 42; // Assigne une valeur à la mémoire allouéeContrairement aux variables régulières créées sur la pile (stack), la mémoire allouée dynamiquement persiste jusqu'à ce qu'elle soit explicitement libérée et peut exister au-delà de la portée où elle a été créée.
Essayez vous-même
#include <iostream>
using namespace std;
int main() {
// Lire l'entrée
int value;
cin >> value;
// À FAIRE : Écrivez votre code ci-dessous
// Utilisez 'new' pour allouer dynamiquement de la mémoire pour un entier
// Stockez le pointeur dans une variable nommée 'numPtr'
// Affectez la valeur d'entrée à la mémoire allouée dynamiquement
// Afficher le résultat
cout << "Value: " << /* déréférencez numPtr ici */ << endl;
cout << "Address: " << /* affichez l'adresse stockée dans numPtr */ << endl;
return 0;
}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
1Pointeurs et mémoire
Qu'est-ce qu'un pointeur ?Opérateur d'adresseOpérateur de déréférencementPointeurs nulsPointeurs et tableauxMémoire dynamique avec 'new'Libérer la mémoire avec 'delete'Récapitulatif - Pratique des pointeurs2Vecteurs (Tableaux dynamiques)
Introduction à std::vectorCréer un vecteurAjouter des élémentsAccéder aux élémentsTaille d'un vecteurItérer avec une boucle ForBoucle For basée sur l'intervalleSupprimer des élémentsRécapitulatif - Opérations sur les vecteurs3Projet : Outil de liste de tâches
Présentation du projetAjouter une tâche