Vérifier un pointeur [C/C++] - C++ - Programmation
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)...
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 :
|
Avant de copier dans buf des données, je souhaiterais vérifier que le pointeur ait été correctement aloué par l'utilisateur.
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 ?
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...
Marsh Posté le 25-10-2004 à 21:45:23
mais un pointeur ne pointe pas forcement sur une zone allouée sur le tas ?
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
Marsh Posté le 25-10-2004 à 21:49:31
Si je poursuis ton exemple...
Code :
|
...me convient parfaitement. p pointe sur une espace mémoire accessible.
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++.
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 ?
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 ?
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 ).
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 ! :-)
Marsh Posté le 26-10-2004 à 00:06:43
Pour infos, sous Win32 tu as les fonctions IsBadCodePtr / IsBadReadPtr / IsBadStringPtr / IsBadWritePtr
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 ...
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...