Pointeurs et mémoire

Signaler
Messages postés
398
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
15 juin 2007
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
Salut,

après un petit voyage dans la msdn, j'ai découvert cette méthode IsBadReadPtr qui permet de savoir si le processus à les droits de lecture de la mémoire, et puis je me suis demandé par curiosité s'il y avait pas une fonction dans l'api qui permettrait de savoir si un pointeur pointe correctement vers une bonne zone mémoire, qui permettrait de se proteger des mauvais delete ou autres écritures dans la mémoire à des endroits pas autorisé.

J'en doute, mais sait-on jamais, l'api win32 recele de trésors que je ne soupconne meme pas :)

Merci de vos réponses

Nico

5 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
j'en sais rien mais je dirai que le meilleur moyen c'est de rester propre, il faut t'assurer que chaque pointeur pointe sur une zone allouer par toit meme ou est NULL, ca permet deja de savoir quand allouer et desallouer

"...écritures dans la mémoire à des endroits pas autorisé"

idem si c'est propre tu sais si tu peut ecrire, non?

quand tu peut pas tu le sais aussi?

genre
char m[]="lklmlklklklmkk";

le tout est de penser a se proteger de m[2]='g'; par ex dans ce cas tu utilise const tout simplement

cependant on peut en arriver a ce demander si un pointeur pointe bien vers une zone "autoriser" mais le fait de savoir ca ca n'avance a rien, imagine ton pointeur pointe et modifie une variable au sein de ton programme san que tu le veuille, je pense que c'est loin d'etre suffisant ...
t'aurai pas un exemple stp?
Messages postés
398
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
15 juin 2007
2
non, j'ai pas d'exemple en fait, j'ai tendance à essayer du mieux que je peux à faire du code propre un peu à la facon que tu décris, mais c'était surtout une curiosité.

Merci de ta réponse
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
je crois avoir trouver un exemple, tu recupere un projet assez consequent (plus de 10000 lignes), pas tres propre, ca serait utilie dans ce cas la, non?
Messages postés
398
Date d'inscription
jeudi 30 octobre 2003
Statut
Membre
Dernière intervention
15 juin 2007
2
Je pense aussi qu'il peut y avoir des programmes, nottament dans le monde des process COM, où il y a plusieurs instances, avec des pointeurs qui ont la meme valeur, mais qui ne sont pas accessibles par tout le monde, ou bien dont la gestion mémoire n'est pas optimale, et lorsqu'une instance détruit un pointeur, l'autre instance ne le sait pas.

Mais, dans ce cas, c'est peut etre la méthode IsBadReadPtr qu'il faut plutot utiliser.

Mais le cas d'un delete et apres on teste si la zone pointée est valide ou pas, peut etre evité avec le pointeur mis automatiquement à NULL lorsqu'il est détruit
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
"Je pense aussi qu'il peut y avoir des programmes, nottament dans le monde des process COM, où il y a plusieurs instances, avec des pointeurs qui ont la meme valeur, mais qui ne sont pas accessibles par tout le monde, ou bien dont la gestion mémoire n'est pas optimale, et lorsqu'une instance détruit un pointeur, l'autre instance ne le sait pas."

oui mais delete met a NULL donc suffit de rajouter des test pour les autres hinstance, d'ailleur pour etre propre faut toujours le faire