MISE À JOUR: Vérifiez ma réponse pour plus de détails, erreur de pointeur.Erreur de segmentation avant l'entrée de la fonction?
J'ai une fonction, qui est censée charger quelques ressources de test et les bliter sur l'écran en utilisant SDL2. Cette fonction lance une segfault immédiatement avant d'exécuter des commandes, sans cause claire. Gardez à l'esprit que certaines des variables de cette fonction sont globales.
Contenu de la fonction:
printf("DEBUG");
int menuSelect = 0;
printf("declare");
SDL_Surface* bg = SDL_LoadBMP("menubg.bmp");
printf("bg load");
SDL_Surface* menu1 = TTF_RenderText_Solid(font,"HACKING PROGRAM",whiteclr);
printf("title blip");
SDL_BlitSurface(bg,NULL,screen,NULL);
printf("event");
SDL_Event* event;
printf("menu2");
SDL_Surface* menu2 = TTF_RenderText_Solid(font,"Hack",whiteclr);
printf("rect");
SDL_Rect menu2r = CreateRect(5,30,menu2->w,menu2->h);
printf("free");
SDL_FreeSurface(menu2);
SDL_FreeSurface(menu1);
while(SDL_WaitEvent(event))
{
switch(event->type)
{
case SDL_MOUSEBUTTONDOWN:
if(event->motion.x > menu2r.x && event->motion.x < menu2r.x+menu2r.w && event->motion.y > menu2r.y && event->motion.y < menu2r.y+menu2r.h)
{
SDL_FreeSurface(bg);
return 0;
}
break;
case SDL_MOUSEMOTION:
if(event->motion.x > menu2r.x && event->motion.x < menu2r.x+menu2r.w && event->motion.y > menu2r.y && event->motion.y < menu2r.y+menu2r.h)
{
menuSelect=1;
}
else
{
menuSelect=0;
}
break;
}
if(menuSelect==1)
{
menu2 = TTF_RenderText_Solid(font,"Hack",selectclr);
}
else
{
menu2 = TTF_RenderText_Solid(font,"Hack",selectclr);
}
}
return 0;
Avez-vous essayé d'exécuter dans gdb ou autre débogueur? Les instructions d'impression de débogage ne vous aident pas si elles ne sont pas exécutées. :) Comment l'exécutez-vous? Avez-vous un fichier core? Quelle est la sortie d'exception complète? – Rob
Il se peut que printf ne s'imprime pas instantanément. Essayez 'fflush (stdout);' après chaque impression pour épingler là où il échoue. – KaeptnNemo
@KaeptnNemo a raison. Alternativement, et plus en ligne avec le courant dominant, écrire des messages d'erreur sur le bien nommé 'stderr', qui pour exactement cette raison n'est pas mis en mémoire tampon par défaut. –