std::矢量超出边界

std::vector out of boundary

本文关键字:边界 std      更新时间:2023-10-16

在下面的代码中,assert语句正在工作(变为false)。然而,没有任何并行线程访问数组。实际上根本没有任何并行代码。当我在函数开始时(在visual studio中)执行该行时,它可以正常工作。是什么原因导致了问题?我看不出有什么原因。

  void CheckProjectileMeteorCollision()
  {
    int i = ((int)m_meteorManager.m_meteors.size() - 1);
    for (i; i > -1; i--)
    {
      int j = ((int)m_projectileManager.m_projectiles.size() - 1);
      for (j; j > -1; j--)
      {
         assert(i != m_meteorManager.m_meteors.size());
        if (SpherePointIntersection(
          m_meteorManager.m_meteors[i]->m_node->m_translation,
          m_meteorManager.m_meteors[i]->m_collisionRadius, 
          m_projectileManager.m_projectiles[j]->m_node->m_translation))
        {
          SafeDel(m_projectileManager.m_projectiles[j]);
          m_projectileManager.m_projectiles.erase(m_projectileManager.m_projectiles.begin() + j);
          SafeDel(m_meteorManager.m_meteors[i]);
          m_meteorManager.m_meteors.erase(m_meteorManager.m_meteors.begin() + i);
        }
      }
    }
  }

可能存在以下问题:内部循环(对于J)可能只删除m_meter的一个以上元素。如果是这样,内部循环将比外部循环更快地擦除外部循环的元素(对于I)。