获取非常奇怪的数组边界异常

Getting array boundary exception that is so weird

我正在尝试实现一个 space 入侵者游戏,现在我正在尝试检查子弹是否击中了入侵者,然后将其删除。

只有当我试图射杀该行中的最后一个入侵者时才会出现异常。 例如,如果我只有一排和 8 个入侵者,最后一个,当子弹击中它时,我无一例外地得到了一个奇怪的边界。

初始化就是这样,伪代码:

struct Invaders_t
{
    vector<Invader*> *invaders;
}
for (int j = 0; j < 1; j++)
    {
        x_spacing = 15;
        for (int i = 0; i < 8; i++)
        {
            Invader *invader = new Invader();
            g_Invaders.invaders->push_back(invader);

    } 

每帧:

for (int x = 0; x < 1; x++)
        {
            for (int y = 0; y < 8; y++)
            {
                Invader *pInvader = (*(g_Invaders.invaders))[x*8 + y];

                if (pInvader != nullptr && pInvader->AlienAtals->GetImage() != nullptr)
                {

                    for (list<Bullet*>::iterator it = ship->Bullets->begin(); it != ship->Bullets->end(); it++)
                    {
                        float left = (*it)->Position.x - 5;
                        float top = (*it)->Position.y - 13;

                        if (CheckCollision(left, top, pInvader->AlienSprite->m_X, pInvader->AlienSprite->GetImage()->GetWidth()/4
                            , pInvader->AlienSprite->m_Y, pInvader->AlienSprite->GetImage()->GetHeight()/4))
                        {
                            std::vector<Invader*>::iterator iter = g_Invaders.invaders->begin();
                            std::advance(iter, (x *8) + y);
                            Invader *invader = *iter;
                            g_Invaders.invaders->erase(iter);
                            delete invader;
                        }

                    }
                }
            }
        }

当你删除一个入侵者(g_Invaders.invaders->erase(iter);)时,vector的大小减少1(iter之后的所有vector元素都向开头移动1个位置,填补空缺space).您的代码没有预料到这一点,并继续迭代向量,就好像仍然有完整的元素集一样。