-1

単純な SDL1.2 コードをコンパイルするたびに正常にコンパイルされますが、ターミナル経由で実行しようとすると ( alt+ tUbuntu では):

./game
Segmentation fault (core dumped)

このエラーが発生します。助けていただけますか?これはコードです:

#include<SDL/SDL.h>

int main(int argc,char args)    
{
    SDL_Init( SDL_INIT_EVERYTHING);    
    SDL_Surface* screen;        
    screen=SDL_SetVideoMode(640,480,32,SDL_HWSURFACE);
    SDL_Flip(screen) ![problem running the program][1];
    SDL_Delay(5000);    
    SDL_FreeSurface(screen);    
    SDL_Quit();
}
4

4 に答える 4

1

これを端末経由で実行しているので、Xorg に端末からの実行を許可するように指示するのを忘れているのではないかと思います。実際、これが本当に問題である場合、そのように起動すると、どのプログラムも実行できなくなります。

問題を解決するには、ターミナルに次のように入力します (これはセッションごとに 1 回だけ実行する必要があります)。

xhost +

成功したというメッセージが表示されるはずです。正確なメッセージを思い出すことはできませんが、次のようなものです。

Clients are now allowed to connect from any host.

何が起こっていたか (私が に関して正しかったと仮定してxhost) は、Xorg が接続を拒否したため、SDL_SetVideoMode()呼び出しが失敗して返されたということでした。NULLあなたはそれをチェックしていないのでSDL_Flip()、ポインターの逆参照を終了しましたNULL---したがって、セグメンテーション違反。


補足:コードにエラーがありますが、 --- つまり、;を呼び出すべきではありません。SDL_FreeSurface(screen);その特定の表面は特殊であり、SDL_Quit();自動的に解放されます。ソース (「戻り値」セクションを参照): http://www.libsdl.org/release/SDL-1.2.15/docs/html/sdlsetvideomode.html

于 2015-02-10T01:49:27.353 に答える
0

SDL_SetVideoMode()失敗しないかチェック!

screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
if (screen == NULL) /* error  */;
于 2015-02-09T19:39:20.587 に答える