2016-06-18 10 views
0

ファイルパス文字列のリストを使用して初期化する構造体があります。ただし、これらの文字列から作成されたSDL_SurfacesでSDL_DisplayFormatを呼び出そうとすると、アプリケーションは起動しません。クラッシュせず、stdout.txtやstderr.txtを生成しません。通常は起動しません。コンパイラはエラーや警告を出さない。これは私のコードです:SDL_DisplayFormatがinitializer_listでクラッシュする

struct Object { 

    std::vector<SDL_Surface*> surfaceVector; 

    Object(initializer_list<std::string> init) { 
     for (auto i : init) { 
      SDL_Surface* loadSurface = SDL_LoadBMP(i.c_str()); 
      surfaceVector.push_back(SDL_DisplayFormat(loadSurface);); 
      SDL_FreeSurface(loadSurface); 
     } 
    } 

} 

私は通常のようにsurfaceVectorで表面にアクセスし、ブリットことができ、SDL_DisplayFormatを呼び出すことはありませんので、彼らが適切にロードされているように見える場合。しかし、私はsurfaceVectorのサーフェスを表示形式にしたい。

+0

'SDL_DisplayFormat(loadSurface)'の戻り値がnullであるかどうかチェックしましたか? –

+0

アプリケーションが実際に起動しないので、私はできませんでしたので、印刷できません。しかし、SDL_DisplaySurface()を削除し、if(loadSurface == NULL)のようなコードを追加すると、cout << "null" else cout << "not null";それでも実行されますが、何も印刷されません。stdout.txtは、他の場所にあるcoutステートメントの数にかかわらず生成されません。だから私はおそらく別の場所で何か変わったことをしただろう – Exudes

答えて

0

SDL2を使用している場合は、SDL_DisplayFormat()の代わりにSDL_ConvertSurfaceFormat()を使用してください。

SDLのwikiページSDL_ConvertSurfaceFormatです。

関連する問題