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

时间:2014-10-02 04:36:58

标签: c++ visual-studio-2012 wxwidgets

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

#include <wx\filename.h>

int main()
{
    wxFileName::Mkdir("Test");
    return 0;
}

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

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

我在另一个线程中读到视觉工作室调试器错误地识别内存泄漏,但我通过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.

1 个答案:

答案 0 :(得分:1)

经过一些挖掘(这是我在发布问题之后所做的挖掘),我发现当你在不创建wxWidgets app对象的情况下使用wxWidgets时,你需要使用以下两个函数:

wxInitialize()

wxUninitialize()

所以我的代码的固定版本如下:

#include <wx/app.h> 

#include <wx\filename.h>

int main()
{
    wxInitialize();

    wxFileName::Mkdir("Waka Waka");

    wxUninitialize();

    return 0;
}

我建议是否有人纯粹为文件管理使用wxWidgets来在构造函数和析构函数中调用这些函数来处理文件,或者在程序的主循环的开头和结尾。