Arto_8000
Messages postés1044Date d'inscriptionlundi 7 mars 2005StatutMembreDernière intervention13 juillet 2010
-
16 juil. 2008 à 23:37
cs_vaz
Messages postés3Date d'inscriptionsamedi 19 juillet 2003StatutMembreDernière intervention13 février 2010
-
7 sept. 2009 à 00:39
Voici un petit bout que j'ai commencé ce projet en c++ avec SDL pour développer un jeu. Pour l'instant je veux simplement m'occuper de la gestion des interfaces et changement d'écran. Présentement, il y a bogue sur lequel je me casse la tête depuis quelques jours à savoir pourquoi.
for (unsigned int i=0; i < _elements.size(); i++)
{
zPos.x = _elements[i]->getPositionX();
zPos.y = _elements[i]->getPositionY();
zPos.h = _elements[i]->getHeight();
zPos.w = _elements[i]->getWidth();
tDraw = _elements[i]->display(); // Exception non gérée à 0x00417662 dans Interface.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xccccccd0
SDL_BlitSurface(tDraw, NULL, cDraw, &zPos);
//SDL_FreeSurface(tDraw);
}
return cDraw;
}
J'ai débugger un peu ce problème sans grand succès. Tout ce que j'ai pu en tirer c'est que c'est l'appel de la fonction display qui sort la violation d'accès d'écriture, pourtant cette fonction existe et _elements[i] n'est pas un pointeur avec comme valeur 0x000000, sinon les 4 autres appels avant aurait planté bien avant de ce rendre à cette ligne.
Pour reproduire le bogue, simplement compiler le projet & quand la fenêtre ouvre clicker sur le bouton "Test". Il y a alors la deuxième interface qui s'affiche et l'affichage plante à cause du bogue.
Le projet est assez gros et surtout en plusieurs fichiers, et je trouve ça un peu inutile de tout mettre ça sur pastebin, alors j'ai fait un rar.
http://www.megaupload.com/fr/?d=T7ZDRT1U
L'extrait ce trouve dans le fichier Zones/zonedialogue.class.cpp lignes 74 à 98.
A voir également:
Violation d'accès lors de la lecture de l'emplacement
Arto_8000
Messages postés1044Date d'inscriptionlundi 7 mars 2005StatutMembreDernière intervention13 juillet 20107 18 juil. 2008 à 04:42
J'ai eu beaucoup de chance aujourd'hui, en cherchant sur le web à propos de cette emplacement "0xccccccd0" et en lisant le dernier message d'un forum un peu perdu, j'ai lu que l'emplacement 0xcccccccc veut dire que c'est quelque chose de non-initialisé. Ceci m'a mis sur la piste que peut-être l'élément n'était pas initialisé, ce qui me semblait totalement impossible puisque les quatre autres fonctions avant fonctionnait. Je suis quand même retourner voir où les éléments était ajouté à mon vecteur. Tout est fait normalement, sauf que j'ai compris que à la fin de la fonction l'élément était "flushé" même s'il y avait toujours un pointeur dessus qui était gardé. Pour les quatre autres fonctions, c'était des fonctions qui était hérité d'un autre classe et que même si l'élément était "flushé", il restait défini.
En résumé, à la fin de chaque fonction tout ce qui a été déclaré dedans est "flushé" et ce peu importe ce que vous avez fait avec. "0xcccccccc " ou tout ce qui peut ressembler à cela veut dire que c'est une variable non-initialisé.