gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:27:24 25 4
gpt4 key购买 nike

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

#include <wx\filename.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 而不创建 wxWidgets 应用程序对象时,您需要使用以下两个函数:

wxInitialize()

wxUninitialize()

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

#include <wx/app.h> 

#include <wx\filename.h>

int main()
{
wxInitialize();

wxFileName::Mkdir("Waka Waka");

wxUninitialize();

return 0;
}

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

关于c++ - 使用涉及 wxFileName 的任何内容时内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26154538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com