链接POCO C++库会导致大量内存泄漏

Linking POCO C++ Library gives numerous memory leaks

本文关键字:内存 泄漏 POCO C++ 链接      更新时间:2023-10-16

我刚刚开始尝试将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()来释放。"