2016-06-18 46 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