C++ 在C+中查找内存错误+;桂

C++ 在C+中查找内存错误+;桂,c++,heap-corruption,C++,Heap Corruption,或者至少我认为问题涉及某种记忆错误。我正在用SFML编写一个程序,目前正在使用我为SFML编写的GUI类处理菜单。在内部,GUI类使用std::shared_ptr管理其所有内部指针。在main()退出并调用所有全局析构函数后,程序始终崩溃,gdb说ntdll中触发了断点!WaitForAlpCompletion,这让我相信问题在于内存损坏。每当我从菜单函数中删除GUI实例化时,它就会退出并关闭,不会出现任何错误。这似乎表明GUI是崩溃的原因,除了创建和销毁自己的GUI实例的子菜单可以在没有任何

或者至少我认为问题涉及某种记忆错误。我正在用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,但我想知道是否有人知道这可能是什么。

以下代码可能导致堆损坏:

int main()
{
    int *A(new(std::nothrow) int(10));
    int *B(A);

    delete B;
    delete A;
}

您的代码中是否包含类似的情况?

最终解决了它!!!!!事实证明,std::map每次重新调整其大小时都会调用其对象的析构函数,导致内部的共享_ptr多次删除其数据。一些“快速”的设计更改和修复:)谢谢大家

为什么我们只能看到伪代码?我怀疑问题出在你的设计上。