链接POCO C ++库会产生大量内存泄漏

时间:2011-06-16 16:36:29

标签: c++ memory-leaks poco

我刚刚开始尝试将Poco C ++库与我们的游戏引擎集成,但是每次我链接/usr/lib/libPocoFoundation.so我的程序突然有51个内存泄漏。删除链接选项可以消除所有泄漏(它们都不是来自我的代码)。即使我从c ++文件中删除了所有Poco #include,也会发生这种情况。

我怀疑Poco的基础(核心)方法确实存在51个内存泄漏 - 搜索他们的论坛并没有透露任何内容,我相信其他用户会注意到这个明显的东西。我认为这与我如何链接到Poco更有可能存在问题?

我在Ubuntu 11上,使用Code :: Blocks作为IDE,使用g ++ 4.5.2构建,并从ubuntu ppa(sudo apt-get install libpoco-dev libpoco-doc)获取Poco 1.3.6p1-1build1。

欢迎任何有关问题的建议!我唯一能想到的是我没有正确地连接Poco。

可能相关:c-poco-lib-linking-error-when-trying-static-linking-vs9-express的OP提到了“添加预处理器标志Foundation_EXPORTS POCO_STATIC PCRE_STATIC” - 这会怎样?我在Poco参考页面上看不到有关如何正确链接Poco的任何信息。

2 个答案:

答案 0 :(得分:5)

你没有说什么工具告诉你你有内存泄漏,但我会假设它是valgrind,因为你在Ubuntu上。

如果即使您没有调用任何POCO方法也会发生泄漏,那么很可能这些是在POCO库的静态初始化期间发生的一次性分配,无论出于何种原因,这些分配都不会在以后被拆除。 / p>

虽然图书馆的表现并不是特别好,但这并不是致命的。你应该担心的泄漏是那些会反复发生并且会逐渐消耗内存的泄漏。

我建议暂时使用valgrind --gen-suppressions=all生成一次性泄漏的抑制(特别好的是你没有调用任何POCO方法)。然后,看看POCO库,看看你是否可以找出为什么这些分配没有在.fini时间解开。如果可以,那么,让POCO人员得到您的修复,然后您可以删除您的抑制条目。如果没有,请将它们保留在内,这样“误报”不会干扰您在代码中发现真正有害的内存泄漏。

答案 1 :(得分:1)

必须通过调用方法" release"

取消分配某些对象

以下是doc poco

的摘录

" DOMObject在DOM的这个实现中定义了内存管理的规则。违反这些规则(如下所述)会导致内存泄漏或悬空指针。

由new或工厂方法创建的每个对象(例如,Document :: create *)必须在不再需要时调用release()或autoRelease()来释放。 "