首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++矢量擦除崩溃程序

C++矢量擦除崩溃程序
EN

Stack Overflow用户
提问于 2013-03-07 11:26:58
回答 2查看 1.8K关注 0票数 0

我的程序创建了向前推进的射弹,如果它们超出了一定的界限,它们将从存储在其中的向量中被删除。向量存储xcord、ycord、zcord以及它们各自的方向。

代码语言:javascript
复制
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;
                }
        }

但当“子弹”超出界限时,我的程序似乎崩溃了。有什么想法吗?

井变

代码语言:javascript
复制
bullet.erase(bullet.begin()+i, bullet.begin()+i+5);

代码语言:javascript
复制
bullet.erase(bullet.begin()+i, bullet.begin()+i+6);

好像已经修好了

对于那些有兴趣的人

代码语言:javascript
复制
      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);

只要单击鼠标,就会发生。

EN

回答 2

Stack Overflow用户

发布于 2013-03-07 11:28:11

你有

代码语言:javascript
复制
i < size

作为您的条件,访问元素

代码语言:javascript
复制
bullet[i] .... bullet[i+5]

那里有什么不对劲吗?当i到达size-1时会发生什么。你会访问bullet[size + 4],对吗?

票数 5
EN

Stack Overflow用户

发布于 2013-03-07 11:32:41

http://www.cplusplus.com/reference/vector/vector/erase/

指定向量中的范围的迭代器]要删除:[第一,最后)。也就是说,范围包括第一个和最后一个之间的所有元素,包括第一个指向的元素,而不是最后一个指向的元素。

问题是您只删除了5个元素,而不是6个元素。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15269960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档