[Cbc] Problem in CoinFactorization::pivotOneOtherRow when adding a constraint that contains a variable more than once
Falk Hueffner
falk at debian.org
Tue Nov 15 09:12:09 EST 2011
Hi,
as the subject says:
$ cat test.cc
#include <coin/OsiClpSolverInterface.hpp>
#include <coin/CbcModel.hpp>
int main() {
CbcModel model = CbcModel(OsiClpSolverInterface());
model.solver()->readLp("/dev/stdin");
model.branchAndBound();
return 0;
}
$ cat crash3.lp
\Problem name:
Minimize
obj: - x0
Subject To
cons0: x0 + x0 <= 1
cons1: x1 <= 1
Bounds
End
$ g++ -g -O3 -W -Wall -I /home/hueffner/opt/cbc-2.7/include test.cc -L/home/hueffner/opt/cbc-2.7/lib -lCbc -lCbcSolver -lCgl -lClp -lCoinUtils -lOsiClp -lOsi -lz -lrt && ./a.out < crash3.lp
Cbc3007W No integer variables - nothing to do
Clp0006I 0 Obj 0 Dual inf 0.9999999 (1)
Clp0006I 0 Obj 0 Dual inf 0.9999999 (1)
zsh: segmentation fault ./a.out < crash3.lp
This is with cbc 2.7 from svn. The segfault sometimes disappears
depending on surrounding code. valgrind reports an invalid read in
CoinFactorization::pivotOneOtherRow. With 2.5.0, I get:
Cbc3007W No integer variables - nothing to do
Clp0006I 0 Obj 0 Dual inf 1 (1)
a.out: CoinFactorization1.cpp:2108: bool CoinFactorization::pivotOneOtherRow(int, int): Assertion `where < end' failed.
zsh: abort ./a.out < crash3.lp
Maybe this is not a valid .lp file, but cbc probably shouldn't crash.
Falk
More information about the Cbc
mailing list