Pour moi, le problème ce situe là :
Copie=SDL_DisplayFormat(SDL_LoadBMP(Chemin));
La fonction SDL_LoadBMP alloue de l'espace mémoire, tout comme la fonction SDL_DisplayFormat. Donc tu effectues deux allocations et une désallocation.
Pour régler le problème :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
void ChargeImage(const char *Chemin,BufferTravail NomBuffer)
{//charge une image sur le buffer selectionné
SDL_Surface *Copie=NULL;
SDL_Rect PosCopie;
if (Buffer[NomBuffer]!=NULL)
{
SDL_Surface *bmp = SDL_LoadBMP(Chemin);
Copie=SDL_DisplayFormat(bmp);
SetRect(&PosCopie,0,0,Buffer[NomBuffer]->w,Buffer[NomBuffer]->h);
SDL_BlitSurface(Copie, &PosCopie, Buffer[NomBuffer], &PosCopie); //Copie sur la surface
SDL_FreeSurface(Copie);
SDL_FreeSurface(bmp);
}
} |
Mais ce code est loin d'être performant, il n'est pas bon de faire des allocations et désallocations à chaque blitage. Habituellement, en début de jeu/niveau, on charge les images dont on aura besoin, puis, le temps que dure la partie on les blitte, et enfin on les désalloue lors du game over. (en imaginant que tu fais un jeu)
Et puis, comme le dit le nom de ta fonction, ChargeImage est censé charger l'image et non l'afficher.
Partager