cs_Booster
Messages postés235Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention 6 octobre 2009
-
16 mars 2008 à 23:50
cs_Booster
Messages postés235Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention 6 octobre 2009
-
17 mars 2008 à 15:34
Bonsoir à tous,
Alors voilà j'ai une fonction comme suit :
bool Fonction (void * ptr, int tailleptr){
char message[2000];
Le problème est que cette fonction peut recevoir un pointeur non null et non initialisé :( donc du cou je vais taper dans des zones mémoires illicite et j'ai de beaux messages d'erreur : "memory could not be read..." (Au moment de faire le memcpy())
Comment puis-je traiter cette erreur ? Sachant que le ptr n'est pas null mais n'est pas lisible non plus !?
cs_Booster
Messages postés235Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention 6 octobre 2009 17 mars 2008 à 15:34
Désolé, En fait c'est bon, l'erreur ne venez pas de là et la fonction sBadReadPtr() marche très bien :D.
En gros (Pour résumé si ça en intéresse certains) je pensais que c'était au moment de la lecture que le PTR était foireux, mais c'est au moment de l'écriture (Dans un autre pointeur) que ça plante car ma fonction ressemble en réalité à ceci :
bool Fonction (void * ptrENTRER, void * ptrSORTIE, int tailleptr){
char message[2000];
memcpy(message , ptr , tailleptr); //tailleptr < 2000
//Traitement message
ptrSORTIE[0] = 0x01; //Par exemple
}
Et c'est ce ptrSORTIE qui n'est pas bon (Je ne l'avais pas présisé, car je pensais que c'était bon (ça marchait bien au début ...))
Bref et du cou mon ENTRER est ok malgré que j'ai un 0x71A57980 qui traine en entrée ça n'a pas l'air de le perturber (Je pensais vraiment que c'était ça !)
cs_Booster
Messages postés235Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention 6 octobre 2009 17 mars 2008 à 10:52
Merci Neo_fr et SAKingdom d'après la MSDN c'est presque pile poil pour mon cas mais malheureusement cela ne marche pas :( snif.
Pour luhtor c'est possible dans le cas où je ne gère en aucun cas l'appelle de ma fonction, c'est windows en quelque sorte qui appelle ma fonction du cou il me passe ce qu'il veut et dans mon cas tout marche ou presque puisque ma fonction est appellée une 15ène de fois et il me passe en paramètre quelque chose du style :
Fonction( 0x0012A430,4);
Fonction( 0x0012A2F8,16);
Fonction( 0x0012A328,16);
....
Fonction(0x71A57980,16); << Addresse foireuse qui me plante l'ittérallement l'application.
Si quelqu'un d'autre à une idée ? (sans comparer les pointeurs if (addr!=0x0012) { //Error } ) :D
cs_Booster
Messages postés235Date d'inscriptionmercredi 30 octobre 2002StatutMembreDernière intervention 6 octobre 2009 17 mars 2008 à 10:59
Quand je dis que cela ne marche pas en réaliter il me dit qu'il arrive à lire l'adresse... (IsBadReadPtr return false) et pourtant c'est bien une mauvaise adresse !