2016-08-16 6 views
3

SDL2.0を使用している場合、SDLがウィンドウやレンダラーを作成できなかった場合は、SDL_Quit()を使用せずにプログラムを停止するのが妥当ですか?初期化に失敗した後でもSDL_Quit()を使用する必要がありますか?

例えば、私は(SDL初期化、窓やレンダラの作成後に)書くことができます。

if (!renderer) 
{ 
    fprintf("Error while creating the renderer: %s\n", SDL_GetError()); 
    return -1; 
} 

SDL_DestroyWindow(window); 
IMG_Quit(); 
SDL_Quit(); 
return 0; 

それとも私が書く必要があります。

if (!renderer) 
{ 
    fprintf("Error while creating the renderer: %s\n", SDL_GetError()); 
    SDL_DestroyWindow(window); 
    SDL_Quit(); 
    return -1; 
} 

SDL_DestroyWindow(window); 
IMG_Quit(); 
SDL_Quit(); 
return 0; 

私は2番目の選択肢が優れていると思いますしかし、レンダラーが作成されていないときでも、SDLを閉じてウィンドウを破棄することが本当に便利であるかどうかはわかりません。 the SDL Wikiから

答えて

5

すべての終了条件にそれを呼び出す必要があります。だから、

、他のSDLの関数を使用するために必要とされる、あなたが前にSDL_Initと呼ばれると仮定すると、あなたはどんなSDL_Quitを呼び出すべきではありません。

また、同じページから:

それも、初期化時にエラーが発生した場合にこの関数を呼び出しても安全です。

これは、あなたがそれを呼び出すことに間違っていることを心配する必要がないことを意味します。

便宜上、SDL_Quitatexitとすることができますが、これは味の問題です。

+0

ありがとうございました:) レンダラの作成に失敗した場合、以前作成したSDL_Windowを破棄する必要がありますか? – TheMrZZ

+1

あなたは確かにすべきです。 'SDL_Window'と' SDL_Renderer'は別々のエンティティです。 [SDL_DestroyWindow'を 'NULL'ポインタ(https://wiki.libsdl.org/SDL_DestroyWindow)で呼び出すこともできます)、単にエラーメッセージを設定します。それはカップルの 'malloc' /' free'のように考えてください。 – Nelfeal

+0

これはまさに私が知りたかったものです!ありがとうNelxiost。 – TheMrZZ

関連する問題