使用任何涉及wxFileName的内容时内存泄漏
Memory leak when using anything involving wxFileName
我在程序中使用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进行文件管理,可以在处理文件的任何类的构造函数和析构函数中调用这些函数,也可以在程序主循环的开始和结束时调用这些函数。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏