2016-07-21 2 views
-3

아래 코드에서 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); 
     } 
     } 
    } 

    } 
+1

최소한의 완전한 예제를 작성하려고 했습니까? 다른 사람이 컴파일하고 실행할 수있는 것이 있습니까? – Jens

+0

'SafeDel'은 아마 여기서 안전하지 않을 것입니다. – LogicStuff

+0

불행히도 "SafeDel"행을 삭제합니다. 아직도 문제가 발생합니다. 이 코드에 논리 문제가없는 경우 나에게 맞는 것입니다. 문제는 다른 곳에서 발생합니다. – Cihan

답변

0

아마도 다음과 같은 문제가있을 수 있습니다. 내부 루프 (for)는 m_meteor의 요소 하나 이상을 삭제할 수 있습니다. 그렇다면 내부 루프는 외부 루프가 통과하는 것보다 더 빨리 외부 루프의 요소를 삭제합니다 (I의 경우).

+0

매우 똑똑한 대답, 이것은 내가 놓친 것입니다. 고맙습니다 ! – Cihan