以下のコードでは、assert文が動作しています(falseになります)。しかし、配列にアクセスする並列スレッドはありません。実際、並列コードはまったくありません。私は、ビジュアルスタジオの中で関数の開始時にラインを運ぶと正しく動作します。何が問題を引き起こす可能性がありますか?私は何らかの理由を見ることができません。std ::境界外のベクトル
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);
}
}
}
}
最小限の完全な例を書こうとしましたか?誰か他の人がコンパイルして実行できるもの? – Jens
'SafeDelは恐らく安全ではないでしょう。 – LogicStuff
残念ながら、私は "SafeDel"行を削除します。まだ問題が発生しています。このコードに論理的な問題が含まれていない場合は、私のためにokです。問題は他にどこかにある。 – Cihan