Bonjour à tous,

Je suis débutant en C++ et j'ai une question au sujet de la commande delete des pointeurs.

Ma question est la suivante. Lorsque l'on effectue un delete, on libère la mémoire référencée par ce pointeur qui peut donc à nouveau être utilisée. Le pointeur pointe toujours sur la case mémoire libérée mais toute commande qui accède au contenu de la mémoire est refusée par le compilateur

ex:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// allocation dynamique d'un tableau de trois entiers 
 
int * tab = new int [3] ;
 
// initialisation du tableau
 
for (int i(0); i < 3 ; i++)
{
 *(tab + i) = 2;
}
 
// liberation de la memoire
 
delete tab;
 
cout << tab << endl ; // OK : contient l'adresse du premier entier du tableau
 
cout << *tab << endl ; // NOK
J'ai lu sur un site que cette situation était risquée, dans la mesure ou la mémoire étant libérée et le pointeur tableau pointant toujours sur la mémoire, il fallait affecter le pointeur à 0 pour éviter tout problème ( avec l'instruction tab(0); )


Mais étant donné que je ne peux accéder aux valeurs par le pointeur après delete (cf NOK), j'ai du mal à voir où se situe le risque.

Merci de vos lumières.

Romain.