[Couenne-tickets] [Couenne, a solver for non-convex MINLP problems] #2: memory leaks in CouenneProblem
Couenne, a solver for non-convex MINLP problems
coin-trac at coin-or.org
Thu Jan 21 04:39:03 EST 2010
#2: memory leaks in CouenneProblem
------------------------+---------------------------------------------------
Reporter: stefan | Owner: somebody
Type: defect | Status: new
Priority: major | Milestone:
Component: component1 | Version:
Keywords: |
------------------------+---------------------------------------------------
Hi,
running the OS unittest under valgrind reveals several memory leaks in
Couenne. I think they are not caused by OS, since I have seen similar ones
somewhere else.
This was with Couenne 0.2.
{{{
==23490== Memcheck, a memory error detector.
==23490== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
==23490== Using LibVEX rev 1732, a library for dynamic binary translation.
==23490== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
==23490== Using valgrind-3.2.3, a dynamic binary instrumentation
framework.
==23490== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
==23490== For more details, rerun with: -v
==23490==
==23490==
==23490== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 5 from 1)
==23490== malloc/free: in use at exit: 1,320 bytes in 54 blocks.
==23490== malloc/free: 540,683 allocs, 540,629 frees, 4,957,640,517 bytes
allocated.
==23490== For counts of detected errors, rerun with: -v
==23490== searching for pointers to 54 not-freed blocks.
==23490== checked 304,560 bytes.
==23490==
==23490== 8 bytes in 1 blocks are indirectly lost in loss record 1 of 15
==23490== at 0x4A05EA5: operator new[](unsigned long)
(vg_replace_malloc.c:199)
==23490== by 0x530550: CouenneSolver::buildSolverInstance()
(OSCouenneSolver.cpp:268)
==23490== by 0x416959: main (unitTest.cpp:1674)
==23490==
==23490==
==23490== 24 bytes in 1 blocks are indirectly lost in loss record 2 of 15
==23490== at 0x4A06205: operator new(unsigned long)
(vg_replace_malloc.c:167)
==23490== by 0x52E6DF:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:310)
==23490== by 0x530567: CouenneSolver::buildSolverInstance()
(OSCouenneSolver.cpp:269)
==23490== by 0x416959: main (unitTest.cpp:1674)
==23490==
==23490==
==23490== 24 bytes in 3 blocks are indirectly lost in loss record 3 of 15
==23490== at 0x4A05EA5: operator new[](unsigned long)
(vg_replace_malloc.c:199)
==23490== by 0x5CCC67: exprSum::exprSum(expression**, int)
(exprSum.cpp:23)
==23490== by 0x5C4936: exprGroup::exprGroup(double,
std::vector<std::pair<exprVar*, double>,
std::allocator<std::pair<exprVar*, double> > >&, expression**, int)
(exprGroup.cpp:79)
==23490== by 0x5301F6: CouenneSolver::buildSolverInstance()
(OSCouenneSolver.cpp:236)
==23490== by 0x416959: main (unitTest.cpp:1674)
==23490==
==23490==
==23490== 32 bytes in 2 blocks are indirectly lost in loss record 4 of 15
==23490== at 0x4A06205: operator new(unsigned long)
(vg_replace_malloc.c:167)
==23490== by 0x52EED9:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:367)
==23490== by 0x52E6B7:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:310)
==23490== by 0x530567: CouenneSolver::buildSolverInstance()
(OSCouenneSolver.cpp:269)
==23490== by 0x416959: main (unitTest.cpp:1674)
==23490==
==23490==
==23490== 32 bytes in 2 blocks are indirectly lost in loss record 5 of 15
==23490== at 0x4A06205: operator new(unsigned long)
(vg_replace_malloc.c:167)
==23490== by 0x52F30C:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:407)
==23490== by 0x52E8BC:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:333)
==23490== by 0x52EECC:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:367)
==23490== by 0x52E6B7:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:310)
==23490== by 0x530567: CouenneSolver::buildSolverInstance()
(OSCouenneSolver.cpp:269)
==23490== by 0x416959: main (unitTest.cpp:1674)
==23490==
==23490==
==23490== 48 bytes in 2 blocks are indirectly lost in loss record 6 of 15
==23490== at 0x4A06205: operator new(unsigned long)
(vg_replace_malloc.c:167)
==23490== by 0x52EEF6:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:367)
==23490== by 0x52E6B7:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:310)
==23490== by 0x530567: CouenneSolver::buildSolverInstance()
(OSCouenneSolver.cpp:269)
==23490== by 0x416959: main (unitTest.cpp:1674)
==23490==
==23490==
==23490== 48 bytes in 2 blocks are indirectly lost in loss record 7 of 15
==23490== at 0x4A06205: operator new(unsigned long)
(vg_replace_malloc.c:167)
==23490== by 0x52E8C9:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:333)
==23490== by 0x52EECC:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:367)
==23490== by 0x52E6B7:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:310)
==23490== by 0x530567: CouenneSolver::buildSolverInstance()
(OSCouenneSolver.cpp:269)
==23490== by 0x416959: main (unitTest.cpp:1674)
==23490==
==23490==
==23490== 48 bytes in 2 blocks are indirectly lost in loss record 8 of 15
==23490== at 0x4A06205: operator new(unsigned long)
(vg_replace_malloc.c:167)
==23490== by 0x52F3DA:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:417)
==23490== by 0x52E8A1:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:333)
==23490== by 0x52EECC:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:367)
==23490== by 0x52E6B7:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:310)
==23490== by 0x530567: CouenneSolver::buildSolverInstance()
(OSCouenneSolver.cpp:269)
==23490== by 0x416959: main (unitTest.cpp:1674)
==23490==
==23490==
==23490== 48 bytes in 3 blocks are indirectly lost in loss record 9 of 15
==23490== at 0x4A06205: operator new(unsigned long)
(vg_replace_malloc.c:167)
==23490== by 0x5CCC88: exprSum::exprSum(expression**, int)
(exprSum.cpp:24)
==23490== by 0x5C4936: exprGroup::exprGroup(double,
std::vector<std::pair<exprVar*, double>,
std::allocator<std::pair<exprVar*, double> > >&, expression**, int)
(exprGroup.cpp:79)
==23490== by 0x5301F6: CouenneSolver::buildSolverInstance()
(OSCouenneSolver.cpp:236)
==23490== by 0x416959: main (unitTest.cpp:1674)
==23490==
==23490==
==23490== 128 (56 direct, 72 indirect) bytes in 1 blocks are definitely
lost in loss record 10 of 15
==23490== at 0x4A06205: operator new(unsigned long)
(vg_replace_malloc.c:167)
==23490== by 0x5301CA: CouenneSolver::buildSolverInstance()
(OSCouenneSolver.cpp:236)
==23490== by 0x416959: main (unitTest.cpp:1674)
==23490==
==23490==
==23490== 80 bytes in 5 blocks are indirectly lost in loss record 11 of 15
==23490== at 0x4A05EA5: operator new[](unsigned long)
(vg_replace_malloc.c:199)
==23490== by 0x533E8C: exprOp::exprOp(expression*, expression*)
(exprOp.hpp:51)
==23490== by 0x533F16: exprSub::exprSub(expression*, expression*)
(exprSub.hpp:30)
==23490== by 0x52E8E2:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:333)
==23490== by 0x52EECC:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:367)
==23490== by 0x52E6B7:
CouenneSolver::createCouenneExpression(OSnLNode*)
(OSCouenneSolver.cpp:310)
==23490== by 0x530567: CouenneSolver::buildSolverInstance()
(OSCouenneSolver.cpp:269)
==23490== by 0x416959: main (unitTest.cpp:1674)
==23490==
==23490==
==23490== 240 (112 direct, 128 indirect) bytes in 2 blocks are definitely
lost in loss record 12 of 15
==23490== at 0x4A06205: operator new(unsigned long)
(vg_replace_malloc.c:167)
==23490== by 0x530604: CouenneSolver::buildSolverInstance()
(OSCouenneSolver.cpp:272)
==23490== by 0x416959: main (unitTest.cpp:1674)
==23490==
==23490==
==23490== 128 bytes in 3 blocks are indirectly lost in loss record 13 of
15
==23490== at 0x4A06205: operator new(unsigned long)
(vg_replace_malloc.c:167)
==23490== by 0x5344D1: __gnu_cxx::new_allocator<std::pair<exprVar*,
double> >::allocate(unsigned long, void const*) (new_allocator.h:92)
==23490== by 0x5344FF: std::_Vector_base<std::pair<exprVar*, double>,
std::allocator<std::pair<exprVar*, double> > >::_M_allocate(unsigned long)
(stl_vector.h:144)
==23490== by 0x534544: std::_Vector_base<std::pair<exprVar*, double>,
std::allocator<std::pair<exprVar*, double> > >::_Vector_base(unsigned
long, std::allocator<std::pair<exprVar*, double> > const&)
(stl_vector.h:117)
==23490== by 0x5B2ABE: std::vector<std::pair<exprVar*, double>,
std::allocator<std::pair<exprVar*, double> >
>::vector(std::vector<std::pair<exprVar*, double>,
std::allocator<std::pair<exprVar*, double> > > const&) (stl_vector.h:248)
==23490== by 0x5C4952: exprGroup::exprGroup(double,
std::vector<std::pair<exprVar*, double>,
std::allocator<std::pair<exprVar*, double> > >&, expression**, int)
(exprGroup.cpp:79)
==23490== by 0x5301F6: CouenneSolver::buildSolverInstance()
(OSCouenneSolver.cpp:236)
==23490== by 0x416959: main (unitTest.cpp:1674)
==23490==
==23490==
==23490== 376 (56 direct, 320 indirect) bytes in 1 blocks are definitely
lost in loss record 14 of 15
==23490== at 0x4A06205: operator new(unsigned long)
(vg_replace_malloc.c:167)
==23490== by 0x53057B: CouenneSolver::buildSolverInstance()
(OSCouenneSolver.cpp:270)
==23490== by 0x416959: main (unitTest.cpp:1674)
==23490==
==23490==
==23490== 576 bytes in 24 blocks are definitely lost in loss record 15 of
15
==23490== at 0x4A06205: operator new(unsigned long)
(vg_replace_malloc.c:167)
==23490== by 0x5C4AD5: exprGroup::exprGroup(exprGroup const&, Domain*)
(exprGroup.cpp:94)
==23490== by 0x5C521D: exprGroup::clone(Domain*) const
(exprGroup.hpp:57)
==23490== by 0x5B6467: exprAux::exprAux(exprAux const&, Domain*)
(exprAux.cpp:67)
==23490== by 0x5B7F8D: exprAux::clone(Domain*) const (exprAux.hpp:82)
==23490== by 0x5AA08B: exprCopy::exprCopy(exprCopy const&, Domain*)
(expression.cpp:127)
==23490== by 0x534606: exprClone::exprClone(exprClone const&, Domain*)
(exprClone.hpp:34)
==23490== by 0x534645: exprClone::clone(Domain*) const
(exprClone.hpp:38)
==23490== by 0x533CC7: exprOp::clonearglist(Domain*) const
(exprOp.hpp:99)
==23490== by 0x533DDB: exprPow::clone(Domain*) const (exprPow.hpp:40)
==23490== by 0x5B6467: exprAux::exprAux(exprAux const&, Domain*)
(exprAux.cpp:67)
==23490== by 0x5B7F8D: exprAux::clone(Domain*) const (exprAux.hpp:82)
==23490==
==23490== LEAK SUMMARY:
==23490== definitely lost: 800 bytes in 28 blocks.
==23490== indirectly lost: 520 bytes in 26 blocks.
==23490== possibly lost: 0 bytes in 0 blocks.
==23490== still reachable: 0 bytes in 0 blocks.
==23490== suppressed: 0 bytes in 0 blocks.
}}}
Stefan
--
Ticket URL: <https://projects.coin-or.org/Couenne/ticket/2>
Couenne, a solver for non-convex MINLP problems <https://projects.coin-or.org/Couenne>
Couenne, a solver for non-convex MINLP problems
More information about the Couenne-tickets
mailing list