Vérifier si adresse mémoire valide

yvescollet Messages postés 55 Date d'inscription mardi 26 août 2003 Statut Membre Dernière intervention 22 janvier 2006 - 15 août 2005 à 14:34
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 22 août 2005 à 09:47
bonjour,

j'aimerais savoir s'il est possible de tester qu'un pointeur contenant une adresse mémoire pointe bien sur une structure existante.
(je dois débugger une applic qui contient plein de pointeurs ayant une adresse (<> nil) mais qui pointent sur des adresse non valides, et donc ça pete quand je fais des :
if assigned(x) then
freeandnil(x);

merci d'avance

Yves

5 réponses

cs_Zeroc00l Messages postés 367 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 11 février 2010
15 août 2005 à 16:00
Je ne crois pas que tu puisses.

Si c'est une structure que tu as défini toi-même, alors non.

Codes toi un gestionnaire de classe sinon.. ca va te prendre un p'tit peu de temps mais ça sera toujours reutilisable !





Une astuce toute simple :

Remplace ta struct par une classe.

Definit un vecteur static dans cette classe (qui prend des TObject)

Dans le constructeur ("Create" en general) de cette classe : ajoute "Self" au vecteur.

Dans le destructeur ("Destroy en general) de cette classe : enelve "Self" du vecteur

Crée une methode static "function Contains(const TObject obj) : bool;"
qui retourne vrai ou faux suivant que l'adresse est dans le vecteur



Soit tu utilise Contains, soit ca te fais chier et tu met le test dans le destructeur

(comme ca marche pour tout les objet)

Cependant si tu le met dans le destructeur ca ne t'aide pas bcp car
meme si le test est effectué, et meme si tu affiche un message, l'objet
sera detruit.Tu peux cependant mettre un point d'arret si dans le
dstructeur tu t'apercois que Self n'est pas dans le vecteur et regarde
la pile des appel, tu sauras d'ou viens la destruction d'un mauvais
objet



Voili voilo , j'espere que j'ai pas été trop obscure :)

Bonne prog


-={[ Zeroc00l ]}=-
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
15 août 2005 à 19:45
Oh là là ZerocOOl, ici ça cause Delphi mon ami . Pas le C++, ok ?
Aurais-tu attrapé un coup de chaleur ?

<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
cs_Zeroc00l Messages postés 367 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 11 février 2010
16 août 2005 à 06:07
ah oui pas bool mais boolean ...

et je suis pas sur mais on peut faire des methodes statique en delphi ?

Je crois que oui


Et OUI effectivement je suis passé a borland c++

Trop besoin des templates ...


-={[ Zeroc00l ]}=-
0
neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008
16 août 2005 à 11:06
Lol, c'est vrai que les templates c'est pratiques, voir très très pratique ! Sinon l'idée est pas mal, même si c'est peut-être long à mettre en place (surtout pour modifier un programme). Cependant tu peut toujours vérifier si tes adresses contiennent bien quelque chose de cohérent à l'aide des watch du débugger.

neodelphi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
22 août 2005 à 09:47
Zerocool : si tu avais vraiment besoin des templates au point de passer à C++ , sans doute n'avais-tu pas lu cet article : Templates in Object Pascal

<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
Rejoignez-nous