2016-06-18 48 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); 
     } 
    } 

} 

如果我不叫SDL_DisplayFormat,我可以訪問並在位塊傳輸的surfaceVector表面像正常的,所以他們似乎是正確加載。但是,我希望surfaceVector中的曲面處於顯示格式。

+0

您是否檢查過「SDL_DisplayFormat(loadSurface)」的返回值是否爲空? –

+0

由於應用程序不會真正開始,所以我無法打印或做任何類似的事情。但是,如果我刪除SDL_DisplaySurface()並添加一些代碼,如if(loadSurface == NULL)cout <<「null」else cout <<「not null」;那麼它仍然運行,但不會打印任何內容,並且stdout.txt不會生成,無論我在別處有多少個cout語句。所以我可能在別的地方做了一些奇怪的事情 – Exudes

回答

0

如果您使用的是SDL2,請嘗試使用SDL_ConvertSurfaceFormat()而不是SDL_DisplayFormat()

SDL的wiki頁面SDL_ConvertSurfaceFormat