OVH Cloud OVH Cloud

existence d'un pointeur

7 réponses
Avatar
Florian
Bonjour

Est ce qu'il est possible de vérifier si un pointeur pointe sur un bon
objet, en effet dans mon programme je m'appercoit avec le debugeur que
mon pointeur pointe dans sur une adresse mais que celle ci est vide et
qu'il ne peut y accedée .
quelle teste est ce que je doit faire.

Florian

7 réponses

Avatar
Fabien LE LEZ
On Thu, 10 Mar 2005 23:00:52 +0100, Florian
:

Est ce qu'il est possible de vérifier si un pointeur pointe sur un bon
objet


Un pointeur non-NULL doit pointer sur un objet ; dans le cas
contraire, il s'agit d'un comportement indéfini, i.e. la norme ne dit
rien, chaque compilateur a droit de faire comme il veut (y compris te
faire livrer un café sucré par Chronopost).

Es-tu vraiment sûr d'avoir besoin d'utiliser un pointeur ? Et si oui,
ne peux-tu pas utiliser un pointeur intelligent, qui t'évitera bien
des soucis ?


--
;-)

Avatar
Jean-Sebastien Mouret
Florian writes:

Bonjour

Est ce qu'il est possible de vérifier si un pointeur pointe sur un bon
objet, en effet dans mon programme je m'appercoit avec le debugeur que
mon pointeur pointe dans sur une adresse mais que celle ci est vide et
qu'il ne peut y accedée .
quelle teste est ce que je doit faire.


le bac français?


--
js

Avatar
kanze
Fabien LE LEZ wrote:
On Thu, 10 Mar 2005 23:00:52 +0100, Florian
:

Est ce qu'il est possible de vérifier si un pointeur pointe
sur un bon objet


Un pointeur non-NULL doit pointer sur un objet ; dans le cas
contraire, il s'agit d'un comportement indéfini, i.e. la norme
ne dit rien, chaque compilateur a droit de faire comme il veut
(y compris te faire livrer un café sucré par Chronopost).


Ce n'est pas tout à fait juste, et en fait, c'est impossible à
éviter de tels pointeurs. Le comportement indéfini n'interviet
que si on les « lit » ou si un tel pointeur apparaisse comme
temporaire (c-à-d dans le langage de la norme, lors d'une
conversion de lvalue en rvalue, ou si le pointeur est un
rvalue).

Es-tu vraiment sûr d'avoir besoin d'utiliser un pointeur ?


Comme j'ai dit, c'est impossible à ne pas les avoir. Si tu fais
« delete p », p devient un tel pointeur. Mais évidemment, il ne
faut pas s'en servir par la suite. Et c'est une bonne technique
de programmation de ne pas les laisser trainer où on risque de
s'en servir.

Et si oui, ne peux-tu pas utiliser un pointeur intelligent,
qui t'évitera bien des soucis ?


Ça dépend. Les pointeurs intelligents aident, mais ils ne
libèrent quand même pas de la nécessité de penser. Un peu de
reflexion sur la durée de vie des objets fait partie de la phase
de conception, même dans les langages avec GC.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
marc.boyer.news
Florian wrote in message news:<d0qg5j$mab$...
Est ce qu'il est possible de vérifier si un pointeur pointe sur un bon
objet,


En théorie: non.
En pratique: on essaye d'utiliser des outils (références, pointeurs
intelligents, RAII, valgrind) qui limitent les problèmes
Et surtout: on fait attention

en effet dans mon programme je m'appercoit avec le debugeur que
mon pointeur pointe dans sur une adresse mais que celle ci est vide et
qu'il ne peut y accedée .
quelle teste est ce que je doit faire.


Relire le programme avec attention.

Marc Boyer

Avatar
Fabien LE LEZ
On 11 Mar 2005 01:07:00 -0800, :

Ce n'est pas tout à fait juste, et en fait, c'est impossible à
éviter de tels pointeurs. Le comportement indéfini n'interviet

que si on les « lit »


... ce qui est forcément le cas si tu cherches à obtenir des
informations dessus (par exemple, si tu cherches à savoir s'il "pointe
sur un bon objet").


--
;-)

Avatar
Olivier Azeau
del yahoo wrote:
Florian wrote in message news:<d0qg5j$mab$...
en effet dans mon programme je m'appercoit avec le debugeur que
mon pointeur pointe dans sur une adresse mais que celle ci est vide et
qu'il ne peut y accedée .
quelle teste est ce que je doit faire.



Relire le programme avec attention.


Voire utiliser des outils qui permettent de détecter des accès mémoire
indéfinis. Il en existe probablement sur toutes les plateformes où
quelqu'un fait du C++ : LeakDiag, Valgrind, etc. (voire Purify ou
BoundsChecker si on est riche)


Avatar
James Kanze
Fabien LE LEZ wrote:
On 11 Mar 2005 01:07:00 -0800, :


Ce n'est pas tout à fait juste, et en fait, c'est impossible à
éviter de tels pointeurs. Le comportement indéfini n'interviet
que si on les « lit »



... ce qui est forcément le cas si tu cherches à obtenir des
informations dessus (par exemple, si tu cherches à savoir s'il
"pointe sur un bon objet").


Tout à fait pour le problème ici. Mais j'avais l'impression que
tu faisais une déclaration plus générale.

--
James Kanze home: www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34