2012-07-02 43 views
1

l SDL_BlitSurface(tileSheets.at(sheet),& clip [tile],screen,& tileBox);在SDL_blitsurface中使用SDL_Rect向量時,出現C++運行時錯誤

工作得很好,我initiliaze剪輯這樣的:

clip[ 0 ].x = x; 
clip[ 0 ].y = y; 
clip[ 0 ].w = 48; 
clip[ 0 ].h = 48; 
x += 48; 
clip[ 1 ].x = x; 
clip[ 1 ].y = y; 
clip[ 1 ].w = 48; 
clip[ 1 ].h = 48; 

在所有

SDL_BlitSurface(tileSheets.at(sheet), &clip.at(tile), screen, &tileBox); 

然而,這不工作我用來初始化他們是這樣的:

for(int i = 0; i < number; i++) 
    { 
     SDL_Rect clipBox = {x,y,48,48}; 
     clip.push_back(clipBox); 
    } 

這是我得到的錯誤:http://imageshack.us/photo/my-images/836/83468944.png/

任何線索?

+1

好像你正在過多索引陣列('在()'拋出excaption當索引超出範圍,'[]'上相同的索引是未定義的行爲) - 當你調用集合上的'push_back()'時,確保你的'tile'在0和'number-1'(包含範圍)內 – Attila

回答

0

不知道變量剪輯的類型,但它可能是因爲您要將堆棧中的變量推送到向量,所以一旦退出for循環的範圍,它們就會變爲無效。

+0

,它創建了傳遞對象的副本,所以scope不是這裏的一個問題 - 如果是的話,'[]'將會失敗以及'at()' – Attila

+0

這取決於剪輯的類型。如果它是存儲引用的矢量,則不會創建副本。 – Jari

+0

這是我如何創建它們(不是兩個在同一時間): 載體剪輯; SDL_Rect clip [2]; – Tallkotten

0

嘗試其中之一:

/* 1) */ SDL_Rect clipBox(x,y,48,48); 
/* 2) */ clip.push_back(SDL_Rect(x,y,48,48)); 
相關問題