C++ 获取c++;在SDL_blitsurface中使用SDL_Rect向量时出现运行时错误
l SDL_BlitSurface(在(表)上的瓷砖层和剪辑[瓷砖]、屏幕和瓷砖盒) 效果很好,我对剪辑进行初始化,如下所示: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
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
等的价值。这只是一个很大的猜测游戏。