Voir la version complète : Segmentation Fault (SDL Parachute Deployed)
Bonjour,
j'essaie de créer un perso qui se déplace sur la fenêtre avec SDL. et j'ai eu cette Erreur :00000015: (cf : titre), a quoi correspond-t-elle ? comment la résoudre ?
merci
Vérifies que pour chaque allocation tu desalloues la mémoire correspondante.
Erreur Réglée. :00000014:
L'erreur est que je chargais une image inexistante qui passait par SDL_LoadBMP et SDL_DisplayFormat sans test de validité.
Il s'agit d'une erreur de segmentation de la mémoire. Elle arrive lorsque l'on tente d'accéder à un emplacement mémoire qui ne nous est pas destiné. Cela arrive souvent lorsque l'on manipule des pointeurs (des SDL_Surface* par exemple).
Il y a un article sur les pointeurs dans le wiki et au moins deux autres sur la gestion des sprites avec SDL. Essaies de trouver d'où vient ton erreur et de te corriger avec l'aide de ces documents. Si tu n'y arrives pas, tu peux toujours poster ton code ici.
Le débuggage de segfaults est plus difficile que de simple erreurs à la compilation car elles peuvent arriver de manière plus ou moins aléatoire et apparaissent surtout à l'exécution ce qui empêche de les localiser précisement. Pour cela, tu peux utiliser un débuggeur qui va te montrer la ligne à laquelle ton programme a échoué (celà dépend de ton ide, mais il s'agit de la touche f8 sous dev-c++).
NB: je vois bien un article du genre "Les erreurs de segmentations (segfault)" sur le wiki. Avec qqs petits schémas, comment les débusquer avec une petite explication sur Electric Fence...
En fait non, l'erreur est réapparue.
Voici le début de main :
int main(int argc, char *argv[])
{
Uint32 bgcolor, incolor;
Character *homme;
SDL_Surface *screen, *image;
SDL_Event event;
bool done = false, right = false, left = false, haut = false, bas = false;
if(SDL_Init(SDL_INIT_VIDEO) == -1)
{
printf("Can't init SDL: %s\n", SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);
if(screen == NULL)
{
printf("Can't set video mode: %s\n", SDL_GetError());
exit(1);
}
bgcolor = SDL_MapRGB(screen->format, 255, 255, 0);
incolor = SDL_MapRGB(screen->format, 255, 255, 255);
image = LoadImage("mort.bmp");
if(image == NULL)
{
printf("File not found: %s\n", SDL_GetError());
exit(1);
}
En lancant le programme j'ai le Seg. Fault, mais si je mets un point d'arrêt juste apres l'accolade de "if(image==NULL)", dans stdout.txt j'obtiens :
File not found: Out of memory
ps : voila ma fonction LoadImage
SDL_Surface * LoadImage(char * img)
{
SDL_Surface * temp,* image;
temp = SDL_LoadBMP(img);
if(temp==NULL) return NULL;
image=SDL_DisplayFormat(temp);
SDL_FreeSurface(temp);
return image;
}
merci
Il n'a pas trouvé le fichier "mort.bmp". Faut le mettre dans le meme dossier que l'executable.
Si tu es sur VS et que tu fais ca en déboguage, bin ton image doit être dans le meme dossier tes sources (Pas dans le dossier Debug, ni Release).
je suis sous devcpp4.9.9.2 et le fichier est dans le même dossier que le reste :00000012:
bizarre, j'ai juste eu a redémarrer et maintenant ca marche. (enfin pour le moment)
je pense que c'était une erreur dans mon code avec SDL_Surface * animation[4][4] que j'ai supprimé
vBulletin® v.3.6.5, Copyright ©2000-2009, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org