Il me paraît indispensable de faire ici quelques remarques importantes, en ce sens qu'elles vous permettront (peut-être) d'éviter des erreurs douloureuses, ou du moins de les corriger plus vite :
*
, il faut être
absolument certain que la variable de type pointeur
à laquelle on l'applique contient une adresse légale,
c'est-à-dire l'adresse d'une zone mémoire effectivement
allouée au stockage d'un objet.
A quoi s'expose-t-on dans le cas contraire ?
A une erreur lors de l'exécution
du programme provoquant son arrêt complet et l'affichage
d'un message du type bus error-core dumped
ou segmentation fault
.
Comment allouer de la mémoire ?
C'est ce que nous allons voir tout de suite.
La première façon d'allouer de la place mémoire pour y stocker
des objets vous est déjà connue : c'est la déclaration de
variables. Les adresses de ces objets peuvent alors être récupérées
grâce à l'opérateur &
déjà présenté.
La seconde façon, dite allocation dynamique, consiste à
faire exécuter dans le programme une opération d'allocation
nommée new
qui retourne comme résultat :
NULL
dans le cas contraire (par exemple si toute la mémoire
de l'ordinateur est déjà occupée).
L'opérateur new
prend pour opérande droit le type de l'objet à
allouer, ce qui définit la taille de la zone de mémoire à réserver
pour stocker cet objet.
L'avantage de l'allocation dynamique par rapport à la déclaration de variables est de permettre d'adapter, lors de l'exécution du programme, la consommation de mémoire à la taille effective des données traitées.
Pour déclarer une variable de type tableau, on a vu que la dimension du tableau devait être spécifiée par une constante. La seule façon d'allouer un tableau dont on ne connaît pas à l'avance la dimension est donc l'allocation dynamique.
L'allocation dynamique de tableau peut se faire simplement par l'opération :
pointeur_type_objet = new nom_type_objet[taille_tableau];La section précise les rapports existant entre pointeurs et tableaux.