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

标签 c++ 2d

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

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

初始化是这样的,用伪代码:

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 个位置,填充空白空间)。您的代码没有预料到这一点,并继续迭代 vector ,就好像仍然有完整的元素集一样。

关于c++ - 获取非常奇怪的数组边界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28131030/

相关文章:

Java 2D 导航网格生成

java - 使用 SOAP 将 C++ 应用程序连接到 JAVA 网络应用程序

c++ - 从展平的 3D 数组计算 3D 坐标

c++ - 纯虚函数可以作为Variadic函数模板吗?

python - 2D 插值导致 OverflowError : Too many data points to interpolate

java - Netbeans 6.x 中的 2D 绘图

iphone - 在 iPhone 的 Quartz 2D 中进行旋转变换时可以移动原点吗?

c++ - 动态查找矩形的边

c++ - 为什么我不能在 C++ 中将函数作为参数跨类传递?

c++ - 在 solaris 中编译 std::count() 时出错