我刚刚开始尝试将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的任何信息。
答案 0 :(得分:5)
你没有说什么工具告诉你你有内存泄漏,但我会假设它是valgrind,因为你在Ubuntu上。
如果即使您没有调用任何POCO方法也会发生泄漏,那么很可能这些是在POCO库的静态初始化期间发生的一次性分配,无论出于何种原因,这些分配都不会在以后被拆除。 / p>
虽然图书馆的表现并不是特别好,但这并不是致命的。你应该担心的泄漏是那些会反复发生并且会逐渐消耗内存的泄漏。
我建议暂时使用valgrind --gen-suppressions=all
生成一次性泄漏的抑制(特别好的是你没有调用任何POCO方法)。然后,看看POCO库,看看你是否可以找出为什么这些分配没有在.fini时间解开。如果可以,那么,让POCO人员得到您的修复,然后您可以删除您的抑制条目。如果没有,请将它们保留在内,这样“误报”不会干扰您在代码中发现真正有害的内存泄漏。
答案 1 :(得分:1)
必须通过调用方法" release"
取消分配某些对象" DOMObject在DOM的这个实现中定义了内存管理的规则。违反这些规则(如下所述)会导致内存泄漏或悬空指针。
由new或工厂方法创建的每个对象(例如,Document :: create *)必须在不再需要时调用release()或autoRelease()来释放。 "