0
void FactorySystem::deleteObjectsToBeDeleted()
{
  //Delete all objects in the ObjectsToBeDeleted list 
  std::vector<unsigned>::iterator it = objectsToBeDeleted.begin();
  for(unsigned i = 0; i < objectsToBeDeleted.size(); i++)
  {
    GameObjectIDMapType::iterator it =  gameObjectIDMap.find(objectsToBeDeleted[i]);
    if(it == gameObjectIDMap.end())
      std::cout << "Bad memory or double deletion error!" << std::endl;
    else
    {
      //Delete it and remove its entry in the ID map
      std::cout << (it->second->GetID()) << std::endl;
      GameObject *object = it->second;
      delete object;
      gameObjectIDMap.erase(it);
    }
  }
  //All objects to be delete have been deleted
  objectsToBeDeleted.clear();
}

delete object を呼び出す行で、プログラムが永久にハングアップし、その理由がわかりません。私はこの問題をグーグルで検索しましたが、誰もこの問題に遭遇したことがないようです。何か悪いことをしているに違いないのですが、何が原因なのかわかりません。何か案は?ありがとう。

編集:

GameObject のデストラクタを表示するように依頼されました。これは次のとおりです。

GameObject::~GameObject()
{
  //Delete each component using the component's virtual destructor
  //takes care of all resources and memory.
  for( ComponentMapIt it = componentMap.begin();it!=componentMap.end();++it)
    delete it->second;
}

もう1つ、私は分解に入り、次の段階までステップアップすることができました。

00488DA9  call        GameObject::`scalar deleting destructor' (044055Fh)  

そしてハングアップするだけで、他に何も起こりません。

編集:これが私の初歩的な間違いでした。何らかの理由で delete 呼び出しに入ることができなかったので、そこにあると思っていましたが、ブレークポイントを入れることで入ることができました。みなさん、ありがとうございました。すべての提案は非常に役に立ちました。

void PhysicsManager::Unregister(RigidBody *Obj)
{
  std::list<RigidBody*>::iterator it = MasterList.begin();

  while(it != MasterList.end())
  {
    if(*it == Obj)
    {
      MasterList.erase(it);
      return;
    }
  }
}
4

1 に答える 1