调用删除会导致程序冻结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()
{
//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;
}
}
}
它是恒定的,永远不会改变:一旦循环开始并且 *it != Obj 循环将永远持续下去
相关文章:
- WIN32:C++,为什么在WM_CLOSE上调用Messagebox函数程序正在冻结
- 程序在对mouse_event的 Windows API 调用中冻结
- C++(SFML?激活某些内容x秒钟,而不会冻结整个程序
- 并行 Python-C++ 程序冻结(内存?
- QT应用程序冻结
- 如何提高四叉树代码的性能以防止程序冻结
- 使用 cin 读取大型输入时程序冻结
- 在C++中读取文件时应用程序冻结
- 由于函数阻止程序执行而导致程序冻结
- 调用删除会导致程序冻结C++
- SRAND 导致我的程序冻结
- 视觉C++程序冻结深奥
- C++程序冻结和UI变为全白
- 程序冻结/循环
- 函数调用会导致C++程序冻结,除非在调试器中逐步执行
- 为什么这个子网类应用程序冻结了
- 当我调用一个函数时,c++列表程序冻结
- Win32 API:打开对话框窗口后应用程序冻结
- 当添加一个用于监听网络的新线程时,应用程序冻结
- 更新CListCtrl时MFC应用程序冻结