或者至少我认为问题涉及某种内存错误。我正在使用SFML制作一个程序,而我目前正在使用我为SFML制作的GUI类来处理菜单。在内部,GUI类使用std :: shared_ptr来管理其所有内部指针。在main()退出并且所有全局析构函数都被调用之后,程序一直崩溃,gdb说在ntdll中触发了一个断点!WaitForAlpCompletion,这让我相信问题是内存损坏。每当我从菜单功能中删除GUI实例时,它都会退出并关闭,没有错误。这似乎表明GUI是崩溃的原因,除了可以调用和退出创建和销毁自己的GUI实例的子菜单,而不会出现任何崩溃或断点。
一些伪代码:
SubMenu
{
Create GUI
Do Menu
Destroy GUI
}
Menu
{
Create GUI
Do Menu?SubMenu
Destroy GUI
}
main
{
Init Stuff
Menu
UnInit Stuff
Destroy GUI
return 0
}
//after return
Global Dtors
Breakpoint triggered???
我对这可能是什么感到茫然。我计划今天在某个时候使用像valgrind这样的内存调试器,但我想知道是否有其他人对这可能是什么有任何想法。
答案 0 :(得分:2)
终于想通了!!!!!事实证明,每次重新调整大小时,std :: map都会调用其对象的析构函数,从而导致shared_ptr内部多次删除它们的数据。一些“快速”设计变更并修复:)谢谢你们!
答案 1 :(得分:0)
此代码可能导致堆损坏:
int main()
{
int *A(new(std::nothrow) int(10));
int *B(A);
delete B;
delete A;
}
您的任何代码是否包含类似的情况?