Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量擦除内存访问错误_C++_Vector_Sfml - Fatal编程技术网

C++ 向量擦除内存访问错误

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

我最近刚开始尝试向量,在删除向量中的一个点时,我一直遇到这个问题。一旦执行erase()函数,就会导致应用程序崩溃,并发生内存访问冲突

以下是该函数的代码:

 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这是第一步。下一步是弄清楚如果
擦除
,你想做什么。这当然不是增量
,但它是什么?你的代码在修改向量后没有任何合理的方式继续。你需要决定你想做什么,并编写代码来完成。你想重新开始吗在修改向量的开头?是否要使用一些逻辑在新向量中查找特定的恢复点?决定要执行的操作并编写代码。