Witam! Mam następujący problem z którym męczę się od kilku godzin i nie mogę znaleźć nigdzie odpowiedzi. Muszę wywołać funkcję release() usuwającą aktora ze sceny oraz usunąć element (klucz ?) który mu odpowiadał w std::map. Działa to poprawnie dopóki, dopóty do usunięcia pozostał ostatni element. Przykładowo dla 2 elementów:
partActors[0] -> (1, 0x00afbbf0)
partActors[1] -> (3,0x063ffc60)
Chce usunąć element o kluczu 3. Iterator itr ma prawidłową wartość którą przypisuje do toErase. Wszystko działa z wyjątkiem, że wykonuje się ++itr i itr przyjmuje losowe wartości (3452816845, 0xcdcdcdcd) (tak jakby wychodził poza zakres ?). Co prawda element (o kluczu 3) jest usunięty, ale dostaje komunikat w debugerze: First-chance exception at (0xjakiś adres)... i aplikacja się wiesza.
map<unsigned int, PxRigidActor*>::iterator itr = partActors.begin();
map<unsigned int, PxRigidActor*>::iterator toErase;
while(itr!=partActors.end())
{
if(checkisInside(*itr->second,itr->first)) //bool checkisInsideAndDelete(PxRigidActor &actor, unsigned int ID)
{
toErase = itr;
++itr;
toErase->second->release();
partActors.erase(toErase);
}
else
{
++itr;
}
}