2017-01-30 9 views
0

これは、bmpイメージをSDLウィンドウのフロントバッファに表示するとします。私はコードで遊んだ。私のinit()関数には何か問題があると思います。私はSDLが初めてです。しかし、私のポインタや私がSDLの機能について欠けているものに問題がなければならない EDIT:GDBを使用して、close()関数が問題であることが判明しました。私はNULLに設定されていたメモリを解放していたためだと思いますか?私は近い機能を取り除き、遅延機能の後にmemを解放しました。SDL2を初期化するセグメンテーションフォルト。私は何が記憶に間違っているのですか?

#include <SDL2/SDL.h> 
#include <stdio.h> 
#include <stdbool.h> 
#define SCREENWIDTH 640 
#define SCREENHEIGHT 480 
SDL_Window *win = NULL; 
SDL_Surface *scrn = NULL; 
SDL_Surface *mscrn = NULL; 
bool init() 
{ 
    bool suc = true; 
    char name[11] = "Hello SDL"; 
    if (SDL_Init(SDL_INIT_VIDEO) != 0) { 
    printf("%s", SDL_GetError()); 
    suc = false; 
    } 
    win = SDL_CreateWindow(name, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREENWIDTH, SCREENHEIGHT, SDL_WINDOW_SHOWN); 
    if (win == NULL) { 
    printf("%s", SDL_GetError()); 
    suc = false; 
    } 
scrn = SDL_GetWindowSurface(win); 

return suc; 
} 
bool loadmedia() 
{ 
    bool suc = true; 
    mscrn = SDL_LoadBMP("hello_world.bmp"); 
    if (mscrn == NULL) { 
    printf("%s", SDL_GetError()); 
    suc = false; 
    } 
    return suc; 
} 
void close() 
{ 
    SDL_FreeSurface(mscrn); 
    SDL_DestroyWindow(win); 
    SDL_Quit(); 
} 
int main(int argc, char* args[]) 
{ 
if (!init()) { 
    close(); 
    return 1; 
    } 
    if (!loadmedia()) { 
    close(); 
    return 1; 
    } 
    SDL_BlitSurface(mscrn, NULL, scrn, NULL); 
    SDL_UpdateWindowSurface(win); 
    SDL_Delay(3000); 

    close(); 
    return 0; 
} 
+1

コンパイラは 'close()'について何を伝えますか? – EOF

+0

とにかく、「閉鎖」とは何でしょうか? –

+0

野生の推測:SDL_Initに失敗した場合は、改行がないため暗黙的にフラッシュされないため、メッセージを表示しませんが、その後行進してウィンドウを作成しようとします。窓の表面と同様に。この時点でA *デバッガ*がメニューに表示されます。 – WhozCraig

答えて

3

妥当なデバッガやその他のツールを使用して、エラーの原因となっている行と原因を調べる必要があります。基本的には、IDEを使用している場合や、非常に優れたコード解析ツールValgrindを使用している場合、通常はIDEに付属のデバッガを使用することになります。

gccを使用している場合は、gdbを使用してプログラムを簡単にデバッグできます。ここではいくつかのリソースを使用すると、セグメンテーションフォールトを診断するためにどのようにしている:あなたは新しい直面するとき、彼らはあなたの将来の数え切れないほどの時間を節約するよう

は、これらのツールに精通ゲット問題。

+0

ありがとうございました! gdbはあなたのリンクをクリックして "backtrace"コマンドを学ぶまで私をいつも混乱させました – ZhangBing

関連する問題