Subject: [Boost-bugs] [Boost C++ Libraries] #10696: boost::container::flat_map copy constructor appears to leak
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2014-10-24 16:57:26
#10696: boost::container::flat_map copy constructor appears to leak
---------------------+------------------------------
Reporter: dave@⦠| Type: Bugs
Status: new | Milestone: To Be Determined
Component: None | Version: Boost 1.54.0
Severity: Problem | Keywords:
---------------------+------------------------------
The following sandbox.cpp program:
{{{
#include <boost/container/flat_map.hpp>
int main(int argc, char** argv)
{
boost::container::flat_map<int, int> myMap;
boost::container::flat_map<int, int> myCopiedMap(myMap);
return 0;
}
}}}
causes valgrind 3.9.0 to produce the following:
{{{
$ valgrind --tool=memcheck --leak-check=full --show-reachable=no --undef-
value-errors=no --track-origins=no --child-silent-after-fork=yes --trace-
children=no ./sandbox
==12648== Memcheck, a memory error detector
==12648== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==12648== Using Valgrind-3.9.0 and LibVEX; rerun with -h for copyright
info
==12648== Command: ./sandbox
==12648==
==12648==
==12648== HEAP SUMMARY:
==12648== in use at exit: 3,287 bytes in 86 blocks
==12648== total heap usage: 122 allocs, 36 frees, 56,978 bytes allocated
==12648==
==12648== 0 bytes in 1 blocks are definitely lost in loss record 1 of 86
==12648== at 0x4C27965: operator new(unsigned long) (in
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==12648== by 0x40410F:
__gnu_cxx::new_allocator<boost::container::container_detail::pair<int,
int> >::allocate(unsigned long, void const*) (new_allocator.h:104)
==12648== by 0x40400B:
boost::container::container_detail::allocator_version_traits<std::allocator<boost::container::container_detail::pair<int,
int> >,
1u>::allocation_command(std::allocator<boost::container::container_detail::pair<int,
int> >&, int, unsigned long, unsigned long, unsigned long&,
boost::container::container_detail::pair<int, int>* const&)
(allocator_version_traits.hpp:144)
==12648== by 0x403F0D:
boost::container::container_detail::vector_alloc_holder<std::allocator<boost::container::container_detail::pair<int,
int> >, boost::container::container_detail::integral_constant<unsigned
int, 1u> >::allocation_command(int, unsigned long, unsigned long, unsigned
long&, boost::container::container_detail::pair<int, int>* const&)
(vector.hpp:395)
==12648== by 0x403D72:
boost::container::container_detail::vector_alloc_holder<std::allocator<boost::container::container_detail::pair<int,
int> >, boost::container::container_detail::integral_constant<unsigned
int, 1u>
>::vector_alloc_holder<std::allocator<boost::container::container_detail::pair<int,
int> >
const&>(std::allocator<boost::container::container_detail::pair<int, int>
> const&, unsigned long) (vector.hpp:350)
==12648== by 0x403BF2:
boost::container::vector<boost::container::container_detail::pair<int,
int>, std::allocator<boost::container::container_detail::pair<int, int> >
>::vector(boost::container::vector<boost::container::container_detail::pair<int,
int>, std::allocator<boost::container::container_detail::pair<int, int> >
> const&) (vector.hpp:732)
==12648== by 0x403B34:
boost::container::container_detail::flat_tree<int,
boost::container::container_detail::pair<int, int>,
boost::container::container_detail::select1st<boost::container::container_detail::pair<int,
int> >, std::less<int>,
std::allocator<boost::container::container_detail::pair<int, int> >
>::Data::Data(boost::container::container_detail::flat_tree<int,
boost::container::container_detail::pair<int, int>,
boost::container::container_detail::select1st<boost::container::container_detail::pair<int,
int> >, std::less<int>,
std::allocator<boost::container::container_detail::pair<int, int> >
>::Data const&) (flat_tree.hpp:119)
==12648== by 0x403A42:
boost::container::container_detail::flat_tree<int,
boost::container::container_detail::pair<int, int>,
boost::container::container_detail::select1st<boost::container::container_detail::pair<int,
int> >, std::less<int>,
std::allocator<boost::container::container_detail::pair<int, int> >
>::flat_tree(boost::container::container_detail::flat_tree<int,
boost::container::container_detail::pair<int, int>,
boost::container::container_detail::select1st<boost::container::container_detail::pair<int,
int> >, std::less<int>,
std::allocator<boost::container::container_detail::pair<int, int> > >
const&) (flat_tree.hpp:207)
==12648== by 0x40399A: boost::container::flat_map<int, int,
std::less<int>, std::allocator<std::pair<int, int> >
>::flat_map(boost::container::flat_map<int, int, std::less<int>,
std::allocator<std::pair<int, int> > > const&) (flat_map.hpp:209)
==12648== by 0x4037BE: main (sandbox.cpp:6)
==12648==
==12648== LEAK SUMMARY:
==12648== definitely lost: 0 bytes in 1 blocks
==12648== indirectly lost: 0 bytes in 0 blocks
==12648== possibly lost: 0 bytes in 0 blocks
==12648== still reachable: 3,287 bytes in 85 blocks
==12648== suppressed: 0 bytes in 0 blocks
==12648== Reachable blocks (those to which a pointer was found) are not
shown.
==12648== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==12648==
==12648== For counts of detected and suppressed errors, rerun with: -v
==12648== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
}}}
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/10696> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:17 UTC