更新:詳細については私の答え、ポインタエラーを確認してください。機能エントリの前にセグメンテーションフォルトが発生しましたか?
私は、いくつかのテスト資産を読み込み、SDL2を使ってそれらを画面にblitする機能を持っています。この関数は、コマンドを実行する直前にsegfaultをスローします。明確な原因はありません。この関数の変数のいくつかはグローバルであることに注意してください。
機能の内容:
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;
gdbや他のデバッガで実行しようとしましたか?デバッグのprint文は、実行されなければあなたを助けません。 :)あなたはこれをどのように実行していますか?あなたはコアファイルを取得しますか?完全な例外出力とは何ですか? – Rob
printfが瞬時に印刷されないことがあります。それぞれの印刷の後で 'fflush(stdout);'を試して、失敗した場所をピンで止めてください。 – KaeptnNemo
@KeptnNemoが正しいです。あるいは、主流に沿って、エラーメッセージを適切な名前の 'stderr'に書きます。これはまさにこの理由のために、デフォルトではバッファされません。 –