簡體   English   中英

調用delete會導致C ++程序凍結

[英]Calling delete causes C++ program to freeze

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();
}

在我稱之為刪除對象的行,程序只是永遠掛起,我無法弄清楚原因。 我搜索了這個問題,就像沒有人曾經遇到過這個問題。 我一定做壞事,但我不知道它會是什么。 有任何想法嗎? 謝謝。

編輯:

我被要求顯示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;
}

另外一件事,我進入拆卸,並能夠一步一步,直到:

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

然后它就會掛起,沒有別的事情發生。

編輯:這是我的菜鳥錯誤。 出於某種原因,我無法進入刪除調用,因此我認為它在那里,但是在其中設置一個斷點允許我進入它。 謝謝大家,您的所有建議都非常有用。

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

  while(it != MasterList.end())
  {
    if(*it == Obj)
    {
      MasterList.erase(it);
      return;
    }
  }
}
void PhysicsManager::Unregister(RigidBody *Obj)
{
  std::list<RigidBody*>::iterator it = MasterList.begin();

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

是常量並且永遠不會改變:一旦循環開始並且*它!= Obj循環繼續

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM