[C++]test sur le contenu d'un pointeur

test sur le contenu d'un pointeur [C++] - C++ - Programmation

Marsh Posté le 23-02-2007 à 18:52:20    

Bonjour,
 
Je débute en C++ et je bloque sur une situation surement classique :
 
J'ai un objet C.
 
J'ai un pointeur P sur l'objet C.
 
Je supprime C ou pas dans une fonction quelconque.
 
A la sortie de cette fonction j'aimerais faire des choses sur C si il a pas été supprimé.
 
Comment puis je tester mon pointeur P pour savoir si sur quoi il pointe a été supprimé ou pas ?  
 
Merci d'avance, et encore pardon si la question fait partie des questions redondante.

Reply

Marsh Posté le 23-02-2007 à 18:52:20   

Reply

Marsh Posté le 23-02-2007 à 18:59:21    

Salut,
Il faut que le pointeur soit mis à 0 (ou NULL selon les préférences) après suppression. A la sortie de ta fonction, tu fais un simple if(P) ou if(P != 0) pour savoir s'il est toujours valide ou non.

Reply

Marsh Posté le 23-02-2007 à 19:08:47    

En fait je n'ai pas acces au pointeur  P depuis la fonction qui supprime ((ou pas) C.
 
 
Au cas ou si ca peut aider :
(En gros C est un arbre, et la fonction est récursive, dans certains cas certains (ou tous) noeuds de l 'arbre peuvent etre supprimés dans cette fonction. A la sortie de la fonction j'aimerais savoir si mes pointeurs sur les noeuds de l'arbre avant suppression sont des pointeurs qui pointent sur des noeud encore existant ou pas.)

Reply

Marsh Posté le 23-02-2007 à 19:15:51    

Ah, pardon, j'ai lu trop vite :/
Je pense qu'il serait mieux que la fonction prenne le pointeur. Sinon, je ne vois pas comment un noeud est supprimé, si ce n'est pas déjà un pointeur... En fait il faudrait en savoir davantage sur la structure de donnée utilisée (en tout cas, pour moi ;))

Reply

Marsh Posté le 23-02-2007 à 19:24:42    

Ok pour essayer de faire claire :
 
Un noeud est une class qui possède comme attribut :
un pointeur vers un noeud (son pere)
un vecteur de pointeur sur des noeuds (ses fils)
(le reste on s'en fout :))
 
J'ai une fonction f1 qui prends comme argument un pointeur sur un noeud N :
Pour chaque fils N' de N lancer f1(N');
f2(N);
 
 
Et ma fonction f2 peut supprimer entierement tous les noeuds.
Donc le cas problématique c'est si dans une des étapes récursives de f1 j'ai supprimé dans l'action f2 disons tout l'arbre, faire un f2 sur N lorsque je remonte d'un cran dansla récursion va me créer un segmentation fault (tout a faitjustifié).
 
Donc avant de lancer f2 sur N j'aimerais vérifier que N existe encore.
 
Si c'est pas clair hésitez pas me le dire :)

Reply

Marsh Posté le 23-02-2007 à 19:51:51    

Vois peut etre à utiliser des smart_ptr.
Ce type de pointeurs compte ses références.

Reply

Marsh Posté le 23-02-2007 à 19:52:03    

Si N est bien un pointeur sur un noeud, alors ce que j'ai dis précédemment fonctionne non?

Code :
  1. f1(N);
  2. if(N != 0)
  3.    f2(N);


Et si f2 est aussi récursive, il te suffit de faire ce test soit à l'entrée dans la fonction, soit juste avant son appel (la première solution est plus clair à la lecture et te permet de voir d'emblée que le paramètre est vérifié autant que possible).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed