C++ 向量擦除内存访问错误
我最近刚开始尝试向量,在删除向量中的一个点时,我一直遇到这个问题。一旦执行erase()函数,就会导致应用程序崩溃,并发生内存访问冲突 以下是该函数的代码:C++ 向量擦除内存访问错误,c++,vector,sfml,C++,Vector,Sfml,我最近刚开始尝试向量,在删除向量中的一个点时,我一直遇到这个问题。一旦执行erase()函数,就会导致应用程序崩溃,并发生内存访问冲突 以下是该函数的代码: bool moveBullets(void) { int i = 0; for(std::vector<sf::Sprite>::iterator it = laserList.begin(); it != laserList.end(); it++) { laserList[i].move(0.0
bool moveBullets(void)
{
int i = 0;
for(std::vector<sf::Sprite>::iterator it = laserList.begin(); it != laserList.end(); it++)
{
laserList[i].move(0.0f, -2.0f);
int id = 0;
for(std::vector<sf::Sprite>::iterator s = enemy.begin(); s != enemy.end(); s++)
{
if(checkCollision(laserList[i], enemy[id]))
{
laserList.erase(laserList.begin() + i);
//enemy.erase(s);
std::cout << "COLLISION";
}
id++;
}
i++;
}
return 0;
bool moveBullets(无效)
{
int i=0;
对于(std::vector::iterator it=laserList.begin();it!=laserList.end();it++)
{
激光列表[i].移动(0.0f,-2.0f);
int id=0;
for(std::vector::迭代器s=敌方.begin();s!=敌方.end();s++)
{
if(检查碰撞(激光列表[i],敌人[id]))
{
擦除(laserList.begin()+i);
//敌人。删除(s);
std::cout当你调用erase
时,你修改了laserList
。这使得它
无效,因为它指向了laserList
的前一个值。但是你可以增加它
。你不能增加迭代器到不再存在的内容。这没有意义。…所以我需要跳过擦除()时的增量?@Bryce910这是第一步。下一步是弄清楚如果擦除,你想做什么。这当然不是增量它,但它是什么?你的代码在修改向量后没有任何合理的方式继续。你需要决定你想做什么,并编写代码来完成。你想重新开始吗在修改向量的开头?是否要使用一些逻辑在新向量中查找特定的恢复点?决定要执行的操作并编写代码。