log4cxx :: Level :: getError()泄漏内存吗?

时间:2015-11-05 13:48:55

标签: c++ memory-leaks log4cxx

我在项目中使用 log4cxx 日志库,并使用 Valgrind内存分析器(在Qt Creator中)检查内存泄漏。

在我看来,log4cxx::Level::getError()log4cxx::Level::getFatal()泄漏了18个字节的内存。

以下是Valgrind转储的相关部分:

18 bytes in 1 blocks are possibly lost in loss record 157 of 409 in OLogger::getLogLevel(char const*) in XXX/Infrastructure/Logging/OLogger.cpp:51
  1: operator new(unsigned int) in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so
  2: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.19
  3: char* std::string::_S_construct<char const*>(char const*, char const*, std::allocator<char> const&, std::forward_iterator_tag) in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.19
  4: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.19
  5: log4cxx::Level::getError() in /usr/lib/liblog4cxx.so.10.0.0
  6: OLogger::getLogLevel(char const*) in XXX/Infrastructure/Logging/OLogger.cpp:51

现在的问题是图书馆是否故意在视图中泄漏内存。例如, VLD 在过去存在静态分配内存问题。也许日志记录系统希望尽可能长时间地保持活动状态以报告导致内存泄漏的错误。这只是我的推测......

任何人都可以验证泄漏吗?它是否设计?如果可能,我该怎么做才能删除它?

谢谢: - )

1 个答案:

答案 0 :(得分:1)

根据apache.org的简短讨论,我当前版本中存在泄漏(请参阅我的问题中的登录信息)。

泄漏需要进一步调查,例如, log4cxx 的开发分支。

我发布这个作为答案,因为我现在知道泄漏并非源于我。