next up previous
Next: Désallouer avec delete[] Up: La mémoire Previous: Les tableaux

Allouer avec new

Si p est un pointeur de type int*, a été initialisé n'importe comment et pointe donc vers une case quelconque d'adresse p, rien ne garantit que cette case d'adresse p est effectivement de type int, ni que les cases suivantes ont été effectivement réservées pour remplir un tableau. Il ne suffit pas de déclarer un pointeur pour avoir un tableau, il faut en effet lui réserver de la place mémoire pour stocker les cases supplémentaires. Pour cela on utilise le mot-clé new de la façon suivante:
int* p;
p = new int[42];
pour trouver un bloc de 42 cases consécutives de type int et conserver l'adresse de la première de ces cases dans p. La i-ème case du tableau est alors désignée par p[i-1] (attention, la première case est la numéro 0), de p[0] à p[42-1]. Pour mettre l'entier 100 dans la troisième case on peut ainsi faire:
p[2] = 100;

L'accès à une case hors du tableau (typiquement p[42] qui serait la 43-ième case) peut provoquer une erreur (de façon aléatoire). Il faut donc faire très attention à l'allocation des tableaux.

On peut également utiliser new sans les crochets afin d'allouer une seule variable et de retourner son adresse:
int* p;
p = new int;
La différence avec p = new int[1]; est qu'il ne faudra pas appeler delete[] (décrit dans le paragraphe suivant) pour libérer l'espace mémoire; il faudra appeler delete à la place.


next up previous
Next: Désallouer avec delete[] Up: La mémoire Previous: Les tableaux
Guillaume Charpiat 2006-12-07