아래 코드에서 assert 문이 작동합니다 (false가됩니다). 그러나 배열에 액세스하는 병렬 스레드는 없습니다. 실제로 병렬 코드가 전혀 없습니다. 함수의 시작점에서 (Visual Studio에서) 선을 옮길 때 제대로 작동합니다. 무엇이 문제를 일으킬 수 있습니까? 나는 어떤 이유도 볼 수 없다.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"행을 삭제합니다. 아직도 문제가 발생합니다. 이 코드에 논리 문제가없는 경우 나에게 맞는 것입니다. 문제는 다른 곳에서 발생합니다. – Cihan