为什么我的程序有一个实例,其中"Vector Subscript out of Range"?
Why is my program having an instance where "Vector Subscript out of Range"?
Bassicly我的代码应该从main()
中的int tt[]
获取int
const int tt[] =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
然后,该程序被暴露为基于向量的顺序给出向量的堇青石,并且如果它给出#1,则给出纹理的堇青石。根据我的cout语句tiletype = tt[count];
,我可以在从int tt[]
读取fith zero后判断程序崩溃,并给出错误Vector Subscript out of Range
。
我认为问题属于我代码的这一部分:
for(x = 1; x < c;++x)
{
for(y = 0; y < r;++y)
{
tiletype = tt[count];
cout <<tiletype<<", ";
vertices[a].position = sf::Vector2f((0+y)*ts,ts*(x+1)+80);
vertices[b].position = sf::Vector2f((0+y)*ts, (0+x)*ts+80);
vertices[d].position = sf::Vector2f(ts+(y*ts),(0+x)*ts+80);
vertices[e].position = sf::Vector2f(ts+(y*ts), ts*(x+1)+80);
vertices[a].texCoords = mapcords(tiletype,0);
vertices[b].texCoords = mapcords(tiletype,1);
vertices[d].texCoords = mapcords(tiletype,2);
vertices[e].texCoords = mapcords(tiletype,3);
a += 4; b += 4; d += 4; e += 4;count++;
}
row += 1;
cout <<endl<<"Row "<<row<<": "; y = 0;
}
这是代码的其余部分。
#include <SFML/Graphics.hpp>
#include <iostream>
using namespace std;
using namespace sf;
Vector2f mapcords(int tt,int corner);
Vector2f mapcords(int tt,int corner)
{
if(tt ==0)
{
if (corner ==1)
{return Vector2f(48,8 );}
if(corner == 1)
{return Vector2f(48,0);}
if (corner ==2)
{return Vector2f(56, 0);}
if (corner == 3)
{return sf::Vector2f(56, 8);}
}
else{
if(corner ==0)
{return Vector2f(0,8 );}
if(corner == 1)
{return Vector2f(0,0);}
if (corner ==2)
{return Vector2f(8, 0);}
if (corner == 3)
{return sf::Vector2f(8, 8);}
}
return Vector2f(0,0 );
}
class drawmap : public sf::Drawable, public sf::Transformable
{
public:
bool load(const string& tileset,const int* tt, int ts, int r, int c, int num)
{
count =0; row =1; a = 0; b = 1; d = 2; e = 3;y=0;x=0;
tiletex.setRepeated(true);
if (!tiletex.loadFromFile(tileset))
return false;
tiletex.setRepeated(true);
vertices.setPrimitiveType(sf::Quads);
vertices.resize(2 * 2 * 4);
cout <<endl<<"Row "<<row<<": ";
for(x = 1; x < c;++x)
{
for(y = 0; y < r;++y)
{
tiletype = tt[count];
cout <<tiletype<<", ";
vertices[a].position = sf::Vector2f((0+y)*ts,ts*(x+1)+80);
vertices[b].position = sf::Vector2f((0+y)*ts, (0+x)*ts+80);
vertices[d].position = sf::Vector2f(ts+(y*ts),(0+x)*ts+80);
vertices[e].position = sf::Vector2f(ts+(y*ts), ts*(x+1)+80);
vertices[a].texCoords = mapcords(tiletype,0);
vertices[b].texCoords = mapcords(tiletype,1);
vertices[d].texCoords = mapcords(tiletype,2);
vertices[e].texCoords = mapcords(tiletype,3);
a += 4; b += 4; d += 4; e += 4;count++;
}
row += 1;
cout <<endl<<"Row "<<row<<": "; y = 0;
}
return true;
}
private:
int row;
int count;
int y,x;
int a,b,d,e;
int tiletype;
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
{
states.transform *= getTransform();
states.texture = &tiletex;
target.draw(vertices, states);
}
sf::VertexArray vertices;
sf::Texture tiletex;
};
即使r和c正确初始化为(我假设)4,一旦循环到y = 4
(即x递增)的点,就不会重置a、b、d或e——这意味着在第五个循环中,您有a = 16
、b = 17
、d = 19
和e = 20
,但您仍然尝试访问vertices[a]
(以及b、d和e)。由于在此之前的顶点已调整为(2 * 2 * 4)
或16,因此可以访问超出其边界的向量。因此,vector subscript out of range
出现错误。
为了保持足够的顶点用于4*你想放在向量中的瓦片数量,你需要做一些事情,比如:
vertices.resize(4 * r * c);
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中用vector填充一个简单的动态数组
- vector.resize()中的分配错误
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 为什么我的向量::擦除调用会抛出"vector subscript out of range"?
- C++ 向量加减抛出"expression: vector subscript out of range."错误
- 如何解决'vector subscript out of range'错误?
- 如何使用 mpi 分散修复"vector subscript out of range"?
- 如何修复邻接列表中的"Debug Assertion Failed" "vector subscript out of range"
- "Vector subscript out of range",在返回声明?
- pop_back() 导致"Vector subscript out of range"
- 我收到"vector subscript out of range"错误
- 为什么我的程序有一个实例,其中"Vector Subscript out of Range"?
- 从矢量字符串中读取和拉直多个图像,得到错误:"vector subscript out of range" [c++]
- 当我尝试运行此程序时,出现一个错误,该错误使程序停止并说"Vector subscript out of range"
- 为什么我的代码出现"vector subscript out of range"错误?
- 将向量传递到函数时出现"vector subscript out of range"错误:c++
- 为什么当我尝试插入到集合向量中时,它会告诉我"vector subscript out of range"?
- 合并排序中的合并功能,"vector subscript out of range"