[Cbc] UMR in CoinCopyN

Matthew Galati magh at lehigh.edu
Sun Nov 16 11:19:46 EST 2008


Purify showed the folloing UMR in CBC. If needed, I can try to make an 
independent test - but that will take some work. Hoping you can tell 
form the trace.

[I] Starting Purify'd 
C:\cygwin\home\magala\COIN\coin-Decomp\Win32\v8\DecompExamples\debug\SmallIP.exe 
at 11/16/2008 11:18:07
[I] Starting main
[I] EXC: Continued exception  {1 occurrence}
[W] UMR: Uninitialized memory read in N::CoinCopyN(double const 
*,int,double *) {1 occurrence}
        Reading 8 bytes from 0x03192058 (8 bytes at 0x03192058 
uninitialized)
        Address 0x03192058 is 32 bytes into a 640 byte block at 0x03192038
        Address 0x03192058 points to a C++ new block in heap 0x02e80000
        Thread ID: 0x8bc
        Error location
            N::CoinCopyN(double const *,int,double *) 
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinhelperfunctions.hpp:44]
                    case 0: do{     *--downto = *--downfrom;
                    case 7:         *--downto = *--downfrom;
                    case 6:         *--downto = *--downfrom;
             =>     case 5:         *--downto = *--downfrom;
                    case 4:         *--downto = *--downfrom;
                    case 3:         *--downto = *--downfrom;
                    case 2:         *--downto = *--downfrom;
            N::CoinMemcpyN(double const *,int,double *) 
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinhelperfunctions.hpp:291]
                    }
                #endif
                #else
             =>     CoinCopyN(from, size, to);
                #endif
                }
                #else
            CoinFactorization::gutsOfCopy(CoinFactorization const&) 
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinfactorization4.cpp:814]
                    CoinMemcpyN ( other.numberInRow_.array(), 
numberRowsExtra_ + 1, numberInRow_.array() );
                    CoinMemcpyN ( other.nextRow_.array(), 
numberRowsExtra_ + 1, nextRow_.array() );
                    CoinMemcpyN ( other.lastRow_.array(), 
numberRowsExtra_ + 1, lastRow_.array() );
             =>     CoinMemcpyN ( other.pivotRegion_.array(), 
numberRowsExtra_ + 1, pivotRegion_.array() );
                    CoinMemcpyN ( other.permuteBack_.array(), 
numberRowsExtra_ + 1, permuteBack_.array() );
                    CoinMemcpyN ( other.permute_.array(), 
numberRowsExtra_ + 1, permute_.array() );
                    CoinMemcpyN ( other.pivotColumnBack_.array(), 
numberRowsExtra_ + 1, pivotColumnBack_.array() );
            CoinFactorization::CoinFactorization(CoinFactorization 
const&) 
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinfactorization1.cpp:30]
                  persistenceFlag_=0;
                  gutsOfInitialize(3);
                  persistenceFlag_=other.persistenceFlag_;
             =>   gutsOfCopy(other);
                }
                /// The real work of constructors etc
                void CoinFactorization::gutsOfDestructor(int type)
            ClpFactorization::ClpFactorization(ClpFactorization 
const&,int) 
[c:\cygwin\home\magala\coin\coin-decomp\clp\src\clpfactorization.cpp:1151]
                      goDense=2;
                  }
                  if (rhs.coinFactorizationA_&&!goDense)
             =>     coinFactorizationA_ = new 
CoinFactorization(*(rhs.coinFactorizationA_));
                  else
                    coinFactorizationA_=NULL;
                  if 
(rhs.coinFactorizationB_&&(denseIfSmaller>=0||!goDense))
            ClpSimplexDual::setupForStrongBranching(char *,int,int) 
[c:\cygwin\home\magala\coin\coin-decomp\clp\src\clpsimplexdual.cpp:5663]
                  CoinMemcpyN(cost_,
                          numberRows_+numberColumns_,saveObjective);
                  CoinMemcpyN(pivotVariable_, numberRows_,savePivot);
             =>   return new ClpFactorization(*factorization_,numberRows_);
                }
                // This cleans up after strong branching
                void
            OsiClpSolverInterface::markHotStart(void) 
[c:\cygwin\home\magala\coin\coin-decomp\osi\src\osiclp\osiclpsolverinterface.cpp:1850]
                    // Setup for strong branching
                    assert (factorization_==NULL);
                    factorization_ = ((ClpSimplexDual 
*)smallModel_)->setupForStrongBranching(spareArrays_,numberRows,
             
=>                                                           numberColumns);
                    int numberColumns2 = smallModel_->numberColumns();
                    CoinMemcpyN( 
smallModel_->columnLower(),numberColumns2, saveLowerOriginal);
                    CoinMemcpyN( 
smallModel_->columnUpper(),numberColumns2, saveUpperOriginal);
            CbcNode::chooseDynamicBranch(CbcModel *,CbcNode 
*,OsiSolverBranch *&,int) 
[c:\cygwin\home\magala\coin\coin-decomp\cbc\src\cbcnode.cpp:3422]
                      if (!skipAll) {
                        // Mark hot start
                        doneHotStart=true;
             =>         solver->markHotStart();
                        xMark++;
                      }
                      // make sure best will be first
            CbcModel::chooseBranch(CbcNode *&,int,CbcNode 
*,OsiCuts&,bool&,CoinWarmStartBasis *,double const*,double 
const*,OsiSolverBranch *&) 
[c:\cygwin\home\magala\coin\coin-decomp\cbc\src\cbcmodel.cpp:12537]
                      if (numberBeforeTrust_==0 ) {
                    anyAction = 
newNode->chooseBranch(this,oldNode,numberPassesLeft) ;
                      } else {
             =>     anyAction = 
newNode->chooseDynamicBranch(this,oldNode,branches,numberPassesLeft) ;
                      if (anyAction==-3)
                    anyAction = 
newNode->chooseBranch(this,oldNode,numberPassesLeft) ; // dynamic did 
nothing
                      }
            CbcModel::branchAndBound(int) 
[c:\cygwin\home\magala\coin\coin-decomp\cbc\src\cbcmodel.cpp:2245]
                    }
                    OsiSolverBranch * branches = NULL;
                    anyAction = chooseBranch(newNode, numberPassesLeft, 
NULL, cuts,resolved,
             =>                  NULL,NULL,NULL,branches);
                    if (anyAction == -2||newNode->objectiveValue() >= 
cutoff) {
                      if (anyAction != -2) {
                    // zap parent nodeInfo
            DecompAlgo2::solveRelaxed(int,int,double const*,double 
const*,double,int,bool,bool,OsiSolverInterface *,list<DecompVar 
*,allocator<DecompVar *>::std>::std&) 
[c:\cygwin\home\magala\coin\coin-decomp\decomp\src\decompalgo2.cpp:3943]
                      //cbc.setStrategy(cbcStrategyDefault);
                      
cbc.messageHandler()->setLogLevel(m_app->m_param.LogLpLevel);
                      //TODO: this is NOT a good version of CBC
             =>       cbc.branchAndBound();//branch and cut??
                      /*printf("CBC B&B     status    = %d\n", 
cbc.status());
                      printf("CBC B&B 2nd status    = %d\n", 
cbc.secondaryStatus());
                      printf("CBC is proven Optimal = %d\n", 
cbc.isProvenOptimal());
            DecompAlgo2::generateVarsFea(list<DecompVar 
*,allocator<DecompVar *>::std>::std&,double&) 
[c:\cygwin\home\magala\coin\coin-decomp\decomp\src\decompalgo2.cpp:2507]
                           true,
                           true,
                           m_subprobSI[m_whichModel][b],
             =>            potentialVars);
               
                      //TODO: add to DecompVar some indicator label from 
which poly
                      //it came from
            DecompAlgo2::generateVars(DecompStatus,list<DecompVar 
*,allocator<DecompVar *>::std>::std&,double&) 
[c:\cygwin\home\magala\coin\coin-decomp\decomp\src\decompalgo2.cpp:2611]
                              "generateVars()", m_param.LogDebugLevel, 2);
                   switch(stat){
                   case STAT_FEASIBLE:
             =>       return generateVarsFea(newVars, mostNegReducedCost);
                   case STAT_INFEASIBLE:
                      return generateVarsInf(newVars, mostNegReducedCost);
                   default:
            DecompAlgo2::processNode(int,double,double) 
[c:\cygwin\home\magala\coin\coin-decomp\decomp\src\decompalgo2.cpp:677]
                         // ---
                         mostNegRC                  = 0.0;
                         m_nodeStats.varsThisCall   = generateVars(m_status,
             =>                            newVars, mostNegRC);
                         m_nodeStats.varsThisRound += 
m_nodeStats.varsThisCall;
               
                         //TODO: can stop DW as soon as lb is higher than
            AlpsDecompTreeNode::process(bool,bool) 
[c:\cygwin\home\magala\coin\coin-decomp\decomp\src\alpsdecomptreenode.cpp:212]
                      //---
                      //THINK??
                      decompStatus = decompAlgo->processNode(getIndex(),
             =>                                              globalLB, 
globalUB);
                      //decompAlgo->getObjBestBoundLB(),
                      //decompAlgo->getObjBestBoundUB());
               
        Allocation location
            new(UINT)      
[f:\sp\vctools\crt_bld\self_x86\crt\src\new.cpp:57]
            <>=(UINT)      
[f:\sp\vctools\crt_bld\self_x86\crt\src\newaop.cpp:7]
            mallocArray    
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinindexedvector.cpp:1558]
                static char * mallocArray(long size)
                {
                  if (size>0) {
             =>     char * array = new char [size];
                    return array;
                  } else {
                    return NULL;
            CoinArrayWithLength::conditionalNew(long) 
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinindexedvector.cpp:1575]
                {
                  if (size_==-1) {
                    freeArray(array_);
             =>     array_ = mallocArray(sizeWanted);
                  } else {
                    setCapacity();
                    if (sizeWanted>size_) {
            CoinFactorizationDoubleArrayWithLength::conditionalNew(int) 
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinindexedvector.hpp:630]
                  //@{
                  /// Conditionally gets new array
                  inline CoinFactorizationDouble * conditionalNew(int 
sizeWanted)
             =>   { return (CoinFactorizationDouble *) 
CoinArrayWithLength::conditionalNew(sizeWanted>=0 ? (long) (((long) 
sizeWanted)*sizeof(CoinFactorizationDouble)) : -1); }
                  //@}
               
                  /**@name Constructors and destructors */
            CoinFactorization::getAreas(int,int,int,int) 
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinfactorization1.cpp:606]
                  nextRow_.conditionalNew( maximumRowsExtra_ + 1 );
                  lastRow_.conditionalNew( maximumRowsExtra_ + 1 );
                  permute_.conditionalNew( maximumRowsExtra_ + 1 );
             =>   pivotRegion_.conditionalNew( maximumRowsExtra_ + 1 );
                #ifdef ZEROFAULT
                  
memset(elementU_.array(),'a',lengthAreaU_*sizeof(CoinFactorizationDouble));
                  memset(indexRowU_.array(),'b',lengthAreaU_*sizeof(int));
            ClpFactorization::factorize(ClpSimplex *,int,bool) 
[c:\cygwin\home\magala\coin\coin-decomp\clp\src\clpfactorization.cpp:1771]
                    numberElements = 3 * numberBasic + 3 * 
numberElements + 20000;
                    coinFactorizationA_->getAreas ( numberRows,
                           numberRowBasic+numberColumnBasic, numberElements,
             =>            2 * numberElements );
                    //fill
                    // Fill in counts so we can skip part of preProcess
                    int * numberInRow = coinFactorizationA_->numberInRow();
            ClpSimplex::internalFactorize(int) 
[c:\cygwin\home\magala\coin\coin-decomp\clp\src\clpsimplex.cpp:1601]
                      exit(0);
                    k++;
                  }
             =>   int status = factorization_->factorize(this, 
solveType,valuesPass);
                  if (status) {
                    handler_->message(CLP_SIMPLEX_BADFACTOR,messages_)
                      <<status
            ClpSimplexDual::setupForStrongBranching(char *,int,int) 
[c:\cygwin\home\magala\coin\coin-decomp\clp\src\clpsimplexdual.cpp:5624]
                  if (!useFactorization) {
                    factorization_->setDefaultValues();
               
             =>     int factorizationStatus = internalFactorize(0);
                    if (factorizationStatus<0) {
                      // some error
                      // we should either debug or ignore
            OsiClpSolverInterface::markHotStart(void) 
[c:\cygwin\home\magala\coin\coin-decomp\osi\src\osiclp\osiclpsolverinterface.cpp:1850]
                    // Setup for strong branching
                    assert (factorization_==NULL);
                    factorization_ = ((ClpSimplexDual 
*)smallModel_)->setupForStrongBranching(spareArrays_,numberRows,
             
=>                                                           numberColumns);
                    int numberColumns2 = smallModel_->numberColumns();
                    CoinMemcpyN( 
smallModel_->columnLower(),numberColumns2, saveLowerOriginal);
                    CoinMemcpyN( 
smallModel_->columnUpper(),numberColumns2, saveUpperOriginal);
[I] Exiting with code 0 (0x00000000)
[I] Program terminated at 11/16/2008 11:18:20




More information about the Cbc mailing list