#9108 closed Bugs (fixed)
flat_multimap leaks on insert(Iterator, Iterator)
Reported by: | Owned by: | Ion Gaztañaga | |
---|---|---|---|
Milestone: | To Be Determined | Component: | container |
Version: | Boost 1.54.0 | Severity: | Problem |
Keywords: | Cc: |
Description
Reproducer:
#include <iostream> #include <boost/container/flat_map.hpp>
typedef boost::container::flat_multimap<int,int> IntMap;
class MapTest { public:
MapTest() {} MapTest(IntMap const &map) :
_map(map) { _map.insert(map.begin(), map.end());
} IntMap const& getMap() {return _map; }
private:
IntMap _map;
};
int main(int argc, char *argv[]) {
using std::cout; using std::endl;
IntMap iMap; for(int i = 0; i < 1000; i++) {
iMap.emplace(i, i);
}
MapTest map(iMap); for(auto const &kvPair : map.getMap()) {
cout << kvPair.first << " : " << kvPair.second << endl;
} return 0;
}
Valgrind Output:
==15820== ==15820== HEAP SUMMARY: ==15820== in use at exit: 8,000 bytes in 1 blocks ==15820== total heap usage: 20 allocs, 19 frees, 49,624 bytes allocated ==15820== ==15820== 8,000 bytes in 1 blocks are definitely lost in loss record 1 of 1 ==15820== at 0x4A068F3: operator new(unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==15820== by 0x4016EF: MapTest::MapTest(boost::container::flat_multimap<int, int, std::less<int>, std::allocator<std::pair<int, int> > > const&) (in /home/abaxter/Projects/Du/apollo-build/bin/sandbox) ==15820== by 0x4013B9: main (in /home/abaxter/Projects/Du/apollo-build/bin/sandbox) ==15820== ==15820== LEAK SUMMARY: ==15820== definitely lost: 8,000 bytes in 1 blocks ==15820== indirectly lost: 0 bytes in 0 blocks ==15820== possibly lost: 0 bytes in 0 blocks ==15820== still reachable: 0 bytes in 0 blocks ==15820== suppressed: 0 bytes in 0 blocks ==15820==
Attachments (2)
Change History (8)
by , 9 years ago
Attachment: | sandbox.cpp added |
---|
comment:1 by , 9 years ago
Apparently the copy got butchered as I forgot to do any formatting. I've attached the sandbox program and valgrind message to this ticket.
While the program does a nonsensical thing, it was the only way I could get the bug to reproduce in something so simple
comment:2 by , 9 years ago
Summary: | flat_map leaks on insert(Iterator, Iterator) → flat_multimap leaks on insert(Iterator, Iterator) |
---|
comment:3 by , 9 years ago
I have proof that a similar thing happens with flat maps, but I'm unable to successfully create a reproducer at this point.
comment:4 by , 9 years ago
I just noticed that this is not a flat_xxx problem but vector's problem. The reserve() function leaks memory.
Reproducer program