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.
Extrait du code :
SDL_Surface* ZoneDialogue::display()
{
SDL_Surface *cDraw = NULL;
SDL_Surface *tDraw = NULL;
SDL_Rect zPos;
cDraw = SDL_CreateRGBSurface(SDL_HWSURFACE, _width, _height, 32,0 ,0, 0, 0);
if (_elements.size() == 0)
return cDraw;
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.