我正在我的程序中使用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.
答案 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来在构造函数和析构函数中调用这些函数来处理文件,或者在程序的主循环的开头和结尾。