使用任何涉及wxFileName的内容时内存泄漏

Memory leak when using anything involving wxFileName

本文关键字:内存 泄漏 任何涉 wxFileName      更新时间:2023-10-16

我在程序中使用wxWidgets进行目录管理和压缩/不妥协的文件集合。在构建文件系统的过程中,我注意到每次运行都会发生内存泄漏。经过大量测试,我意识到每当我使用任何与wxFileName相关的函数时,我都会出现内存泄漏。我使用的是wx小部件3.0.1,我的独立示例如下。

#include <wxfilename.h>
int main()
{
    wxFileName::Mkdir("Test");
    return 0;
}

如果我创建wxFileName类的实例,结果是一样的。

如何使wx小部件不产生内存泄漏?我希望能够将大量文件集合打包在一个文件中,并使用各种其他库从中读取数据(通过将zip提取到一个临时文件夹并从那里读取数据)。我还无法获得任何其他库来压缩/解压缩整个文件夹,所以我真的需要能够在没有内存泄漏的情况下使用wxWidgets。

我在另一个线程中读到visual Studio调试器错误地识别了内存泄漏,但我通过AQtime运行了它,它确认确实存在内存泄漏。

涉及内存泄漏的确切调试输出如下:

Detected memory leaks!
Dumping objects ->
{1087} normal block at 0x009B4BC0, 64 bytes long.
 Data: <+= d+= l+= t+= > 5C 2B 3D 00 64 2B 3D 00 6C 2B 3D 00 74 2B 3D 00 
{1086} normal block at 0x009B4880, 772 bytes long.
 Data: <                > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
{1085} normal block at 0x009B4680, 28 bytes long.
 Data: < H              > 80 48 9B 00 C1 00 00 00 00 00 00 00 CD CD CD CD 
Object dump complete.

经过一番挖掘(这可能是我在发布问题后所做的挖掘),我发现当你在没有创建wxWidgets应用程序对象的情况下使用wxWidget时,你需要使用以下两个函数:

wxInitialize()

wxUninitialize()

因此,我的代码的固定版本如下:

#include <wx/app.h> 
#include <wxfilename.h>
int main()
{
    wxInitialize();
    wxFileName::Mkdir("Waka Waka");
    wxUninitialize();
    return 0;
}

我建议,如果有人纯粹使用wxWidgets进行文件管理,可以在处理文件的任何类的构造函数和析构函数中调用这些函数,也可以在程序主循环的开始和结束时调用这些函数。