C++ C++;wxWidgets Gui应用程序在关闭后仍保留在内存中

C++ C++;wxWidgets Gui应用程序在关闭后仍保留在内存中,c++,memory,process,wxwidgets,memory-leaks,C++,Memory,Process,Wxwidgets,Memory Leaks,主题说明了一切。在我关闭我的应用程序后,它将保留在具有一些内存的进程列表中。我尝试了googleperf工具,并进行了数小时的调试以找到漏洞 是否有其他工具来测试它并发现问题 谢谢。我猜你已经关闭了顶层窗口,以及它的所有子窗口,但你还没有关闭应用程序本身 如果您的程序以“正常”方式安排,则不会发生这种情况,但如果您有意或无意使用了不寻常的安排,则可能会发生这种情况 当然,修复它取决于您对代码的具体安排。然而,这里有一个开始的建议 关闭应用程序的常用方法是调用wxApp::OnExit(),这通常

主题说明了一切。在我关闭我的应用程序后,它将保留在具有一些内存的进程列表中。我尝试了googleperf工具,并进行了数小时的调试以找到漏洞

是否有其他工具来测试它并发现问题


谢谢。

我猜你已经关闭了顶层窗口,以及它的所有子窗口,但你还没有关闭应用程序本身

如果您的程序以“正常”方式安排,则不会发生这种情况,但如果您有意或无意使用了不寻常的安排,则可能会发生这种情况

当然,修复它取决于您对代码的具体安排。然而,这里有一个开始的建议

关闭应用程序的常用方法是调用wxApp::OnExit(),这通常在顶级窗口关闭时发生

您是否有自己的类,从wxApp派生?是否有OnExit()的重写?如果没有,那么就这样做,并使用调试器检查是否正在调用它。如果它没有被调用,请确定如何确保它被调用

另一个想法是:使用以下方法检查顶层窗口是否会关闭应用程序

bool wxApp::GetExitOnFrameDelete()常量

如果在打开顶级窗口时应用程序将退出,则返回true 已删除,否则为false

如果此返回为false,请使用相应的集合使其为false

第三个想法:当任何顶级窗口打开时,应用程序都不会退出。那么,您可能有另一个最小化或不可见但尚未关闭的顶层窗口?由此派生的任何wxDialog或WxFrame或窗口都是顶级窗口,将阻止应用程序关闭


第四个想法:您是否有应用程序对象的全局变量或属性,它们的析构函数可能会进入一个无休止的循环?这些析构函数在窗口被销毁后调用,如果其中一个没有返回,您将看到您描述的行为。

您可以尝试查看wxWidget的示例文件夹。您会发现许多小而完整的应用程序包含完整的初始化/退出应用程序周期


检查一些示例并与应用程序的工作流进行比较。

是……问题已解决。未被破坏的顶层窗口。内存泄漏……愚蠢的错误

这是明智的。如果你刚刚开始编写你的应用程序,那么你最好放弃你所拥有的——它有一个严重的问题——从一个最接近你需要的示例开始。如果你花了很多时间在你的应用上,那么这将不会有吸引力。但是,据推测,你的应用程序直到最近才开始工作,所以你只需要撤销最近的更改——当然,你使用的是版本控制系统。