Programmer en C++
Allocation dynamique de mémoire

Un moyen efficace d'utiliser une variable ou un objet, à la fois dans le programme principal mais aussi à l'intérieur d'une fonction, est de créer une allocation dynamique de mémoire pour cette variable ou cet objet.
Nous utiliserons l'opérateur new pour réserver l'espace mémoire nécessaire pour le stockage, et ensuite l'opérateur delete pour détruire cet espace avant de quitter le programme.
Ne surtout pas oublier de détruire cet espace car même après l'arrêt du programme, cet espace reste réservé, et n'est donc plus disponible pour le fonctionnement de l'ordinateur. Je vous rassure, vous récupérez cet espace au redémarrage de votre machine, mais imaginez un serveur continuellement en fonction qui utilise de façon répété un tel programme. Il finirait pas planter pour cause de mémoire insuffisante.

Assez bavardé, découvrons maintenant comment utiliser ces nouveaux opérateurs

1. L'opérateur new.

Supposons travailler sur des variables de type "entière", nous commençons donc par déclarer un pointeur de type entier. Une bonne habitude est d'initialiser ce pointeur à zéro.

int * monPointeur = 0;

L'allocation de la mémoire se fait ensuite de cette façon :

monPointeur = new int;

Nous venons donc de réserver un emplacement mémoire pour un entier.
Attribuons maintenant par exemple la valeur 27 à cet entier :

* monPointeur = 27;

Il est possible également de réserver un emplacement mémoire de grande taille en utilisant par exemple un tableau. Ce qui suit réserve un tableau de 200 nombres entiers.

monPointeur = new int [200];

2. L'opérateur delete.

A ne pas oublier pour éviter les fuites de mémoires !
Avant de quitter le programme, pour supprimer l'emplacement mémoire et donc la variable que nous avons précédemment utilisée, nous écrivons :

delete monPointeur;

3. Allocation dynamique de tableaux.

Pour un tableau de 10 caractères utilisant le pointeur défini précédemment, on écrira :

monPointeur = new int [10];

L'initialisation des valeurs du tableau pourrait alors se faire de la façon suivante :

for(int i=0; i<10; i++)
{
    monPointeur[i] = 0;
}

Notez qu'utiliser ici le symbole * du deréférencement serait une erreur. La présence des crochets se suffit a elle même pour signifier qu'on attend une valeur et non une adresse.
Certains programmeurs préfèrent d'ailleurs écrire * (monPointeur + i) = 0

Avant de quitter le programme nous libérons la mémoire de cette façon :

delete [] monPointeur;

Observez la présence des crochets avant le nom du pointeur pour signifier qu'il s'agissait d'un tableau.

4. Un exemple complet.

#include <iostream>

using namespace std;

int main()
{
    int * monPointeur = new int [5];
    for(int i=0; i<5; i++)
    {
        monPointeur[i] = 2 * i;
        cout << "monPointeur[" << i << "] = " << monPointeur[i] << endl;
    }

    delete [] monPointeur;
    return 0;
}

En une seule ligne, nous allouons un espace mémoire de 5 entiers, et nous attribuons l'adresse de ce tableau au pointeur que nous venons de créer. La boucle permet ensuite d'initialiser les valeurs de notre tableau. Ce sera ici les premiers nombres paires. La mémoire est ensuite libérée.