【发布时间】:2013-07-02 23:21:17
【问题描述】:
我正在浏览 Cinder 的 Box2D 模板中的代码,并且想要修改代码,以便我可以从屏幕上删除框并添加它们。我是 C++ 新手,但根据我从其他 SO 帖子中学到的知识,我正在尝试使用这种情况从向量中删除框:
for( vector<b2Body*>::iterator boxIt = mBoxes.begin(); boxIt != mBoxes.end(); ++boxIt ) {
if( (*boxIt)->GetPosition().x > scaledX){
boxIt = mBoxes.erase(boxIt);
}
else {
Vec2f pos( (*boxIt)->GetPosition().x, (*boxIt)->GetPosition().y );
float t = toDegrees( (*boxIt)->GetAngle() );
glPushMatrix();
gl::translate( pos );
gl::rotate( t );
Rectf rect( -BOX_SIZE, -BOX_SIZE, BOX_SIZE, BOX_SIZE );
gl::drawSolidRect( rect );
glPopMatrix();
}
}
但是当“(*boxIt)->GetPosition().x”第二次执行时,这会导致错误的访问崩溃。有什么想法吗?
【问题讨论】:
-
第二次是什么意思?
-
我添加了一些 cout 行来查看程序崩溃的位置;它成功地运行了一次 if 案例(这向我表明对擦除的调用正在工作),但是当再次执行 if 守卫时它崩溃了。我假设 *boxIt 不再有效,但我不确定为什么。
标签: c++ pointers vector iterator