C++ 使用boost日志,检查内存泄漏

C++ 使用boost日志,检查内存泄漏,c++,c++11,boost,memory-leaks,C++,C++11,Boost,Memory Leaks,测试代码: #include <iostream> #include <boost/log/trivial.hpp> using namespace std; int main() { cout << "hello, world" << endl; BOOST_LOG_TRIVIAL(trace) << "A trace severity message"; BOOST_LOG_TR

测试代码:

#include <iostream>
#include <boost/log/trivial.hpp>

using namespace std;

int main()
{
        cout << "hello, world" << endl;

        BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
        BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
        BOOST_LOG_TRIVIAL(info) << "An informational severity message";
        BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
        BOOST_LOG_TRIVIAL(error) << "An error severity message";
        BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";

        return 0;
}
mem.log如下所示:

==29900== 8 bytes in 1 blocks are still reachable in loss record 1 of 6
==29900==    at 0x4A06019: operator new(unsigned long) (vg_replace_malloc.c:167)
==29900==    by 0x4C8D04B: boost::log::v2_mt_posix::aux::this_thread::get_id() (in /usr/local/lib/libboost_log.so.1.56.0)

==29900== 8 bytes in 1 blocks are still reachable in loss record 2 of 6
==29900==    at 0x4A06019: operator new(unsigned long) (vg_replace_malloc.c:167)
==29900==    by 0x4C8751C: boost::log::v2_mt_posix::sources::aux::get_severity_level() (in /usr/local/lib/libboost_log.so.1.56.0)

==29900== 16 bytes in 1 blocks are still reachable in loss record 3 of 6
==29900==    at 0x4A06019: operator new(unsigned long) (vg_replace_malloc.c:167)
==29900==    by 0x511ADD2: boost::detail::add_thread_exit_function(boost::detail::thread_exit_function_base*) (in /usr/local/lib/libboost_thread.so.1.56.0)

==29900== 24 bytes in 1 blocks are still reachable in loss record 4 of 6
==29900==    at 0x4A06019: operator new(unsigned long) (vg_replace_malloc.c:167)
==29900==    by 0x511A44C: boost::detail::make_external_thread_data() (in /usr/local/lib/libboost_thread.so.1.56.0)

==29900== 24 bytes in 1 blocks are still reachable in loss record 5 of 6
==29900==    at 0x4A06019: operator new(unsigned long) (vg_replace_malloc.c:167)
==29900==    by 0x4C87569: boost::log::v2_mt_posix::sources::aux::get_severity_level() (in /usr/local/lib/libboost_log.so.1.56.0)

 ==29900== LEAK SUMMARY: 
 ==29900==    definitely lost: 0 bytes in 0 blocks. 
 ==29900==      possibly lost: 0 bytes in 0 blocks. 
 ==29900==    still reachable: 520 bytes in 6 blocks. 
 ==29900==         suppressed: 0 bytes in 0 blocks.

报告的唯一问题是“仍然可以到达”的问题,这些问题并不总是真正的问题。Valgrind是一个很好的工具,但是这个特定的类别(
--show reachable
)对大多数人来说并不有用。您应该停止使用此选项,因为它不会显示任何实际需要修复的内容

来自同一个国家:

“仍然可以访问”意味着你的程序可能是正常的——它没有释放一些它本可以拥有的内存。这是很常见的,而且通常是合理的。如果不想查看这些报告,请不要使用--show reachable=yes


系统版本:CentOS 5.3版(最终版)valgrind-3.2.1请添加Boost版本。
==29900== 8 bytes in 1 blocks are still reachable in loss record 1 of 6
==29900==    at 0x4A06019: operator new(unsigned long) (vg_replace_malloc.c:167)
==29900==    by 0x4C8D04B: boost::log::v2_mt_posix::aux::this_thread::get_id() (in /usr/local/lib/libboost_log.so.1.56.0)

==29900== 8 bytes in 1 blocks are still reachable in loss record 2 of 6
==29900==    at 0x4A06019: operator new(unsigned long) (vg_replace_malloc.c:167)
==29900==    by 0x4C8751C: boost::log::v2_mt_posix::sources::aux::get_severity_level() (in /usr/local/lib/libboost_log.so.1.56.0)

==29900== 16 bytes in 1 blocks are still reachable in loss record 3 of 6
==29900==    at 0x4A06019: operator new(unsigned long) (vg_replace_malloc.c:167)
==29900==    by 0x511ADD2: boost::detail::add_thread_exit_function(boost::detail::thread_exit_function_base*) (in /usr/local/lib/libboost_thread.so.1.56.0)

==29900== 24 bytes in 1 blocks are still reachable in loss record 4 of 6
==29900==    at 0x4A06019: operator new(unsigned long) (vg_replace_malloc.c:167)
==29900==    by 0x511A44C: boost::detail::make_external_thread_data() (in /usr/local/lib/libboost_thread.so.1.56.0)

==29900== 24 bytes in 1 blocks are still reachable in loss record 5 of 6
==29900==    at 0x4A06019: operator new(unsigned long) (vg_replace_malloc.c:167)
==29900==    by 0x4C87569: boost::log::v2_mt_posix::sources::aux::get_severity_level() (in /usr/local/lib/libboost_log.so.1.56.0)

 ==29900== LEAK SUMMARY: 
 ==29900==    definitely lost: 0 bytes in 0 blocks. 
 ==29900==      possibly lost: 0 bytes in 0 blocks. 
 ==29900==    still reachable: 520 bytes in 6 blocks. 
 ==29900==         suppressed: 0 bytes in 0 blocks.