[Coin-discuss] Possible memory leaks in CoinPreSolve when using CBC/CLP?

John J Forrest jjforre at us.ibm.com
Sat Jul 14 12:32:06 EDT 2007


Kish,

I can see how the first one occurs if a problem is found to be infeasible,
but I can't see how second one does.

Please send me the program.

John


                                                                           
             Kish Shen                                                     
             <kish.shen at crossc                                             
             oreop.com>                                                 To 
             Sent by:                  coin-discuss at list.coin-or.org       
             coin-discuss-boun                                          cc 
             ces at list.coin-or.                                             
             org                                                   Subject 
                                       [Coin-discuss] Possible memory      
                                       leaks in CoinPreSolve when using    
             07/14/2007 01:35          CBC/CLP?                            
             AM                                                            
                                                                           
                                                                           
             Please respond to                                             
             Discussions about                                             
                open source                                                
               software for                                                
                Operations                                                 
                 Research                                                  
             <coin-discuss at lis                                             
              t.coin-or.org>                                               
                                                                           
                                                                           





Hi,

I have been using valgrind to try and track down some memory leaks in
our program that uses CBC/CLP solver. Valgrind reports several instances
of memory allocations that are then subsequently lost (I assume because
it was not deleted) while my program call CbcModel's branchAndBound.
They occur in two places:

==23118== 64 bytes in 4 blocks are definitely lost in loss record 83 of 127
==23118==    at 0x401CD4D: operator new[](unsigned)
(vg_replace_malloc.c:195)
==23118==    by 0x82C469D:
implied_free_action::presolve(CoinPresolveMatrix*, CoinPresolveAction
const*, int&) (CoinPresolveImpliedFree.cpp:978)
==23118==    by 0x810C91B: ClpPresolve::presolve(CoinPresolveMatrix*)
(ClpPresolve.cpp:543)
==23118==    by 0x81106C6:
ClpPresolve::gutsOfPresolvedModel(ClpSimplex*, double, bool, int, bool,
bool) (ClpPresolve.cpp:1505)
==23118==    by 0x810B8DA: ClpPresolve::presolvedModel(ClpSimplex&,
double, bool, int, bool, bool) (ClpPresolve.cpp:101)
==23118==    by 0x805376A: OsiClpSolverInterface::resolve()
(OsiClpSolverInterface.cpp:404)
==23118==    by 0x81D72A8: CbcModel::resolve(CbcNodeInfo*, int)
(CbcModel.cpp:4890)
==23118==    by 0x81D4FD8: CbcModel::solveWithCuts(OsiCuts&, int,
CbcNode*) (CbcModel.cpp:4194)
==23118==    by 0x81C6D19: CbcModel::branchAndBound(int)
(CbcModel.cpp:1342)
==23118==    by 0x804CE2A: coin_branchAndBound(lp_desc*) (coinplex.cpp:451)
==23118==    by 0x804EDAE: coin_solve_problem (coinplex.cpp:1296)
==23118==    by 0x82DE948: step_1 (bug.c:473)

The call to new[]  in CoinPresolveImpliedFree.cpp:

      double *save_costs = nonzero_cost ? new double[hinrow[row]] : NULL;

and the second case:

==23118== 11,708 (208 direct, 11,500 indirect) bytes in 13 blocks are
definitely lost in loss record 57 of 127
==23118==    at 0x401C8CF: operator new(unsigned) (vg_replace_malloc.c:163)
==23118==    by 0x82BBC3D:
drop_empty_rows_action::presolve(CoinPresolveMatrix*, CoinPresolveAction
const*) (CoinPresolveEmpty.cpp:432)
==23118==    by 0x810D0A5: ClpPresolve::presolve(CoinPresolveMatrix*)
(ClpPresolve.cpp:726)
==23118==    by 0x81106C6:
ClpPresolve::gutsOfPresolvedModel(ClpSimplex*, double, bool, int, bool,
bool) (ClpPresolve.cpp:1505)
==23118==    by 0x810B8DA: ClpPresolve::presolvedModel(ClpSimplex&,
double, bool, int, bool, bool) (ClpPresolve.cpp:101)
==23118==    by 0x805376A: OsiClpSolverInterface::resolve()
(OsiClpSolverInterface.cpp:404)
==23118==    by 0x81D72A8: CbcModel::resolve(CbcNodeInfo*, int)
(CbcModel.cpp:4890)
==23118==    by 0x81D4FD8: CbcModel::solveWithCuts(OsiCuts&, int,
CbcNode*) (CbcModel.cpp:4194)
==23118==    by 0x81C6D19: CbcModel::branchAndBound(int)
(CbcModel.cpp:1342)
==23118==    by 0x804CE2A: coin_branchAndBound(lp_desc*) (coinplex.cpp:451)
==23118==    by 0x804EDAE: coin_solve_problem (coinplex.cpp:1296)
==23118==    by 0x82DE948: step_1 (bug.c:473)
==23118==

and the call to new in CoinPresolveEmptycpp is:

    return (new drop_empty_rows_action(nactions, actions, next));

--------------------------------
As far as I can tell, both these cases are internal data structures
allocated in the call to branchAndBound, so they are not problems with
my own code's memory management, or have I missed something important?

I am using the trunk branch of Cbc, downloaded June 14.

I can send the program that generated these memory leaks if needed.
.
Thanks and cheers,

Kish Shen
_______________________________________________
Coin-discuss mailing list
Coin-discuss at list.coin-or.org
http://list.coin-or.org/mailman/listinfo/coin-discuss





More information about the Coin-discuss mailing list