[POO] Constructeur devant être rendu explicite
Des fois, on a beau chercher, on a beau logger, on a beau débugger, on ne trouve pas. On vient même à se demander si ce n'est pas le compilateur qui bugge. Vous est-ce déjà arrivé?
--------
Un exemple partiel de log:
Code:
1 2 3 4 5
| Surface::colorkey debug 1
Color::map debug 1
Color:: map debug 2
freeing 0x2955648 (refcount: 1)
Surface::colorkey debug 2 |
Ce log est créé par la fonction:
Code:
1 2 3 4 5 6 7 8 9 10
| /* Change le colorkey de la surface avec la nouvelle couleur */
void Surface::colorkey(const Color &color)
{
fprintf(stderr,"Surface::colorkey debug 1\n");
if (SDL_SetColorKey(s,SDL_SRCCOLORKEY|SDL_RLEACCEL, color.map(s)) < 0)
throw InterfaceException("Surface::colorkey -- error");
fprintf(stderr,"Surface::colorkey debug 2\n");
} |
Je cherche où la ligne en rouge a pu être produite.
La ligne rouge est lancée quand on fait un appel à SDL_FreeSurface():
Code:
#define SDL_FreeSurface(s) {fprintf(stderr, "freeing 0x%x (refcount: %d)\n", s, (s)?s->refcount:0); SDL_FreeSurface(s);}
Je dois donc trouver où l'on fait appel à SDL_FreeSurface...
D'après le log, c'est dans cette ligne:
Code:
SDL_SetColorKey(s,SDL_SRCCOLORKEY|SDL_RLEACCEL, color.map(s))
Le code de la fonction color.map est le suivant:
Code:
1 2 3 4 5 6 7 8 9
| Uint32 Color::map(const Surface &s) const
{
fprintf (stderr, "Color::map debug 1\n");
Uint32 res = SDL_MapRGB(s.s->format, r,g,b);
fprintf (stderr, "Color:: map debug 2\n");
return res;
} |
Toujours d'après le log, la ligne rouge ne vient pas de la fonction Color::map...
Donc la ligne rouge viendrait de la fonction SDL_SetColorKey, fonction éprouvée de la librairie SDL.
Enfin, pour cela, encore faudrait-il qu'elle fasse appel à SDL_FreeSurface...
Voici sa déclaration dans son header:
Code:
1 2 3 4 5
| /*
...
*/
extern DECLSPEC int SDLCALL SDL_SetColorKey
(SDL_Surface *surface, Uint32 flag, Uint32 key); |
Pas de SDL_FreeSurface en vue... En plus vu que j'ai redéfini SDL_FreeSurface par une macro après l'inclusion du header, même si SDL_FreeSurface était présent dans le header, ça changerait pas grand chose...
Pourtant, la ligne en rouge dit qu'il y a un SDL_FreeSurface quelque part. Alors quoi? Erreur du compilateur? Il s'amuse à rajouter des lignes dans le programme?
----
Si vous aussi vous avez des expériences à partager, n'hésitez pas!