【发布时间】:2017-06-13 07:12:15
【问题描述】:
我有一个类对象向量(子弹),它在大多数情况下都有效。但是,一旦我尝试删除项目符号,它就会循环回来,然后导致断点。 “基本游戏.exe 已触发断点。”我试过前后迭代,但总是卡住。
我正在使用 SFML,对象是具有位置、旋转和大小的矩形。
for (it = bullets.end(); it != bullets.begin(); it--)
{
it->draw(game);
it->move();
if (it->bullet.getPosition().x > 800)
{
bullets.erase(it);
}
}
我是编码新手,所以如果您需要其他信息,请尝试提供。
【问题讨论】:
-
从
std::vector中删除元素将使其所有迭代器(在本例中为it)无效,调用未定义的行为(因为您试图在下一个循环周期中使用it-1,@ 987654326@). -
有效的是 bullets.erase(it--);但是你必须重新考虑你的 for 循环
-
即使第一个
it->draw(game);也是UB(因为it是end())。 -
你可能想看看erase/remove idiom。
标签: c++ visual-studio sfml