C++ 获取c++;在SDL_blitsurface中使用SDL_Rect向量时出现运行时错误

C++ 获取c++;在SDL_blitsurface中使用SDL_Rect向量时出现运行时错误,c++,sdl,codeblocks,block,C++,Sdl,Codeblocks,Block,l SDL_BlitSurface(在(表)上的瓷砖层和剪辑[瓷砖]、屏幕和瓷砖盒) 效果很好,我对剪辑进行初始化,如下所示: 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(tileSheet

l SDL_BlitSurface(在(表)上的瓷砖层和剪辑[瓷砖]、屏幕和瓷砖盒)

效果很好,我对剪辑进行初始化,如下所示:

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);
    }
for(int i=0;i
这是我得到的错误:


有什么线索吗?

不知道变量剪辑的类型,但可能是因为您正在将堆栈中的变量推送到向量,所以一旦退出for循环的作用域,它们就会变得无效。

请尝试以下方法之一:

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

似乎您对数组进行了过度索引(
at()
在索引超出范围时抛出越界,
[]
在同一索引上是未定义的行为)--在对集合调用
push_back()
时,确保您的
磁贴
在0和
数字1
(包括边界)之内,它会创建所传递对象的副本,因此范围在这里不是问题——如果是的话,
[]
会失败,而
at()
也会失败,这取决于剪辑的类型。如果它是一个存储引用的向量,那么就不会创建副本;SDL_-Rect clip[2];是的,但是
[]
也应该失败,谁知道呢?SDL LIB可能是使用不同的向量选项构建的,两者不兼容。我们这里没有足够的信息。我们看不到这个东西是如何被创建的,我们不知道
sheet
tile
等的价值。这只是一个很大的猜测游戏。