2014-11-25 49 views
0

我有以下一段代碼,其中有很多其他的東西(我沒有包含在這個主題中),我試圖啓動SDL,創建一個渲染和加載一些精靈。SDL_ConvertSurface()導致中斷

一切編譯得很好,但是當我跑我的應用程序中斷造成話說:0000005:在0x681252D5(SDL.dll)在加勒比世界SDL.exe 未處理的異常訪問衝突讀取位置0x16161804

的發生斷裂,並在那裏我使用SDL_ConvertSurface()函數

誰能幫我了,我看不出有什麼不對

個Declerations:

SDL_Texture* background = NULL; 
SDL_Surface* tmp = NULL; 
SDL_Surface* surface = NULL; 

SDL_Window *window = SDL_CreateWindow("Carribean World", 
    SDL_WINDOWPOS_UNDEFINED, 
    SDL_WINDOWPOS_UNDEFINED, 
    1360, 768, 
    SDL_WINDOW_RESIZABLE); 

SDL_Surface* screen = SDL_GetWindowSurface(window); 

SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0); 

SDL_PixelFormat* fmt = screen->format; 

主: 初始化所有SDL子系統

if (SDL_Init(SDL_INIT_EVERYTHING) == -1) 
{ 
    return 0; 
} 

載入圖像表面

if ((tmp = IMG_Load("images/water.jpg")) == NULL) 
{ 
    cout << "SDL_SetVideoMode() Failed: " << SDL_GetError() << endl; 
    return 0; 
} 

就在這裏休息造成

if ((surface = SDL_ConvertSurface(tmp, fmt, 0)) == NULL) 
{ 
    cout << "SDL_ConvertSurface() Failed: " << SDL_GetError() << endl; 
} 
background = SDL_CreateTextureFromSurface(renderer, tmp); 
+1

您不應該將'SDL_Init'的返回值與'-1'進行比較,因爲它只能保證爲負數,不一定爲'-1'。 – ooga 2014-11-25 00:53:27

+0

我將它改爲<0,返回一條消息,但問題不存在,它仍然在** SDL_ConvertSurface ** – Panagiotis 2014-11-25 01:04:21

+0

中斷什麼「返回消息」是什麼意思? – ooga 2014-11-25 01:30:43

回答

1

你還沒有檢查返回值SDL_GetWindowSurface。但無論如何,此function的SDL文檔中提到'您可能不會將此與3D窗口或此窗口上的渲染API結合使用'。因此,無論您是專門使用SDL_Renderer API,還是,都使用SDL_BlitSurface等,之後調用SDL_UpdateWindowSurface,但不能同時使用這兩種API。

+0

我不知道如果我undrestand是什麼導致休息。應該怎麼做呢?原諒我的無知,但我只用了兩天時間與SDL – Panagiotis 2014-11-25 09:50:59

+0

不要創建渲染器,我想。並且不要使用紋理。 *或*使用紋理,但不使用屏幕表面 - 在這種情況下不需要轉換爲顯示格式,紋理創建自身選擇最佳格式。 – keltar 2014-11-25 09:53:04

+0

謝謝,這真的很有幫助!:) – Panagiotis 2014-11-25 12:38:56