链接POCO C++库会导致大量内存泄漏
Linking POCO C++ Library gives numerous memory leaks
我刚刚开始尝试将Poco C++库与我们的游戏引擎集成,但每次我链接/usr/lib/libPocoFoundation.so时,我的程序都会突然发生51次内存泄漏。删除链接选项可以消除所有泄漏(没有一个来自我的代码)。即使我从c++文件中删除了所有Poco #include
,也会发生这种情况。
我怀疑Poco的Foundation(核心)方法真的有51个内存泄漏——搜索他们的论坛并没有发现任何东西,我相信其他用户会注意到这一点。我认为这更可能是我如何与波科联系的问题?
我在Ubuntu 11上,使用Code::Blocks作为IDE,g++4.5.2进行构建,并从Ubuntu ppa(sudo apt-get install libpoco-dev libpoco-doc
)中获取了Poco 1.3.6p1-build1。
任何关于问题可能是什么的建议都是最受欢迎的!我唯一能想到的是,我没有正确地连接波科。
可能相关:c-poco-lib-linking-error-when-trying-static-linking-vs9-express的OP提到了一些关于"添加的预处理器标志Foundation_EXPORTS poco_static PCRE_static"的内容-这会怎么做?我在Poco参考页面上看不到任何关于如何正确链接Poco的信息。
你没有说是什么工具告诉你你有内存泄漏,但我认为这是valgrind,因为你在Ubuntu上。
如果即使您没有调用任何POCO方法也会发生泄漏,那么这些很可能是在POCO库的静态初始化期间发生的一次性分配,无论出于何种原因,这些分配稍后都不会被拆除。
虽然这对图书馆来说不是特别好的行为,但也不是致命的。您应该担心的泄漏会重复发生,并逐渐消耗内存。
我建议现在使用valgrind --gen-suppressions=all
来生成一次性泄漏的抑制(特别好的是,您没有调用任何POCO方法)。然后,看看POCO库,看看你是否能弄清楚为什么这些分配在.fini时间没有解除。如果可以的话,太好了,让POCO的人得到你的修复,然后你可以记下你的抑制条目。如果没有,请保留它们,这样这些"误报"就不会干扰在代码中发现真正有害的内存泄漏。
某些对象必须通过调用方法"release"来解除分配
下面是一个医生poco的摘录
"DOMObject定义了DOM实现中的内存管理规则。违反这些规则(如下所述)会导致内存泄漏或悬挂指针。
当不再需要新方法或工厂方法(例如Document::create*)创建的每个对象时,都必须通过调用release()或autoRelease()来释放。"
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏