c++矢量擦除崩溃程序
C++ vector erase crashes program
我的程序创建了向前移动的抛射体,如果它们超出了一定的界限,它们将从存储它们的向量中删除。矢量存储了xcord, ycord, zcord和它们各自的方向。
int size = bullet.size();
for(int i = 0; i < size; i+=6)
{
float xc = bullet[i];
float yc = bullet[i+1];
float zc = bullet[i+2];
float xd = bullet[i+3];
float yd = bullet[i+4];
float zd = bullet[i+5];
if(xc > 100 || yc > 10 || zc > 100 || xc < -100 || yc < -10 || zc < -100)
{
bullet.erase(bullet.begin()+i, bullet.begin()+i+5);
size=size-6;
i = i-6;
}
else
{
glEnable(GL_TEXTURE_2D);
glBindTexture ( GL_TEXTURE_2D, texture_id[3] );
glPushMatrix();
glTranslatef( xc+(xd/2), yc+(yd/2), zc+(zd/2)); //x y z coord of sphere
glRotatef( 0,0,1,0);
glRotatef( -80,1,0,0);
glRotatef( 0,0,0,1);
glScalef( 0.10f, 0.10f, 0.10f);
gluQuadricTexture(quadric,1);
gluSphere(quadric,10.0,72,72);
glPopMatrix();
glDisable(GL_TEXTURE_2D);
bullet[i] = xc+xd;
bullet[i+1] = yc+yd;
bullet[i+2] = zc+zd;
}
}
但是当一个"子弹"越界时,我的程序似乎崩溃了。什么好主意吗?
变化
bullet.erase(bullet.begin()+i, bullet.begin()+i+5);
bullet.erase(bullet.begin()+i, bullet.begin()+i+6);
似乎已经修复了它
感兴趣的
bullet.push_back(xpos);
bullet.push_back(0.0f);
bullet.push_back(zpos);
bullet.push_back(nxpos);
bullet.push_back(nypos);
bullet.push_back(nzpos);
在点击鼠标时发生
你有
i < size
作为条件,访问元素
bullet[i] .... bullet[i+5]
看到有什么不对吗?当i
到达size-1
时会发生什么。你会进入bullet[size + 4]
,对吧?
http://www.cplusplus.com/reference/vector/vector/erase/
指定要删除的vector对象[内范围的迭代器:(首先,)。也就是说,范围包括了第一个元素之间的所有元素包括first 所指向的元素,但不包括第一个所指向的元素.
问题是你只删除了5个元素而不是6个。
相关文章:
- 提升 ASIO Async_receive崩溃程序
- 类指针方法崩溃程序
- get_body来自 IHTMLDocument2 崩溃程序
- 是否有可能存在不会崩溃程序的内存问题
- 调试运行时出现奇怪的崩溃程序(Eclipse C++)
- 儿童对话框 - setWindowTexta或sendmessagea崩溃程序-MFC
- 顶点阵列GLFW崩溃C 程序
- 将值分配给Float数据类型崩溃程序
- OpenCV-将变量添加到类成员崩溃程序
- boost::interprocess::managed_shared_memory 崩溃程序
- 将枚举值分配给整数崩溃程序
- SDL 1.2 -> SDL 2.0(崩溃程序)
- 空析构函数崩溃程序:C++
- 冒泡排序崩溃程序c++
- Ofstream关闭崩溃程序
- 删除字符* 崩溃程序
- c++矢量擦除崩溃程序
- Lua_getglobal崩溃程序
- 通过Copy Constructor创建的e2打印崩溃程序
- RNG崩溃c++程序