[C/C++] Vérifier un pointeur

Vérifier un pointeur [C/C++] - C++ - Programmation

Marsh Posté le 25-10-2004 à 21:16:39    

Je souhaiterais vérifier qu'une variable pointeur pointe effectivement vers un espace mémoire accessible par mon programme.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 25-10-2004 à 21:16:39   

Reply

Marsh Posté le 25-10-2004 à 21:35:21    

C'est bizarre comme question. Il sort d'où ton pointeur ?
 
Sous Visual C++, tu as AfxIsValidAddress (encore que je ne suis pas sûr que ça passe sous Win XP SP2). Sous unix, il doit y avoir quelques API qui vont bien.  
 
Mais c'est plutôt rare comme besoin (et pas très cathodique)...

Reply

Marsh Posté le 25-10-2004 à 21:37:34    

oui, c'est quoi le but ?

Reply

Marsh Posté le 25-10-2004 à 21:38:22    

D'accord, voici le contexte : je realise un programme en c++ dont l'api est ecrite en C pour un besoin de compatibilité. Certaines fonctions appelées par l'utilisateur sont du genre :

Code :
  1. read( char* buf, int buflen ); // lecture d'une donnée par l'utlisateur.


Avant de copier dans buf des données, je souhaiterais vérifier que le pointeur ait été correctement aloué par l'utilisateur.


Message édité par xterminhate le 25-10-2004 à 21:39:03

---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 25-10-2004 à 21:41:08    

oui, mais
 

xterminhate a écrit :

Je souhaiterais vérifier qu'une variable pointeur pointe effectivement vers un espace mémoire accessible par mon programme.


 
cest suffisant comme test ?


Message édité par cris56 le 25-10-2004 à 21:41:46
Reply

Marsh Posté le 25-10-2004 à 21:43:30    

Il resterait à vérifier la taille de la mémoire allouée. Ce serait la cerise sur le g...


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 25-10-2004 à 21:45:23    

mais un pointeur ne pointe pas forcement sur une zone allouée sur le tas ?

Reply

Marsh Posté le 25-10-2004 à 21:46:17    

oui et ?


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 25-10-2004 à 21:47:26    

ben je sais pas moi (suis pas un pro)
 
int n;
int *p = &n;  
...
 
edit : je pose juste la question


Message édité par cris56 le 25-10-2004 à 21:48:24
Reply

Marsh Posté le 25-10-2004 à 21:49:31    

Si je poursuis ton exemple...

Code :
  1. read( p, 1 );


...me convient parfaitement. p pointe sur une espace mémoire accessible.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 25-10-2004 à 21:49:31   

Reply

Marsh Posté le 25-10-2004 à 21:49:37    

Je pense qu'il veut dire qu'une fonction système qui teste la validité d'un pointeur ne peut pas se baser uniquement sur les "logs" de malloc et de free, puisque l'utilisateur peut vouloir écrire dans sa pile, ou même dans un segment de code.
 
C'est d'ailleurs la différence entre AfxIsMemoryBlock et AfxIsValidAddress sous VC++.

Reply

Marsh Posté le 25-10-2004 à 21:52:48    

voila c'est ca  :)
 
xterminhate > faudrais que le pointeur pointe la ou il doit pointer, généraliser ca à tout l'espace memoire adressable par le  programme, ca te rassure vraiment ?

Reply

Marsh Posté le 25-10-2004 à 21:52:50    

Est-il possible de récuprer les adresses de debut et de fin de la zone mémoire associée à un process ?


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 25-10-2004 à 21:54:43    

Sous quel système, avec quel compilo ?  
 
(de toutes façons, la réponse sera non a priori ;) ).

Reply

Marsh Posté le 25-10-2004 à 21:59:02    

Finallement, je vais laisser à l'utilisatuer le soin de gérer ses mauvaises allocations...
 
Bien merci quand même ! :-)


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 26-10-2004 à 00:06:43    

Pour infos, sous Win32 tu as les fonctions IsBadCodePtr / IsBadReadPtr / IsBadStringPtr / IsBadWritePtr


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 26-10-2004 à 02:58:45    

moi je dirais que c'est pas ton problème de faire ce genre de vérification... et t'es pas sorti de l'auberge, ça peut pointer dans des tas d'espaces mémoire différents, parfois même readonly ...

Reply

Sujets relatifs:

Leave a Replay

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