[Cbc] Crash on 64 bit machine

Giacomo Nannicini giacomo.n at gmail.com
Tue Dec 21 12:38:23 EST 2010


Hi,
while using Couenne, I have a random crash that only occurs on a 64
bit machine (the same code works perfectly fine on 32 bit, or so it
seems!).
Trying to trace the bug, I found the following:

==19081== Invalid write of size 4
==19081==    at 0x759F3A: void CoinMemcpyN<unsigned int>(unsigned int
const*, int, unsigned int*) (CoinHelperFunctions.hpp:284)
==19081==    by 0x97975D:
CoinWarmStartBasis::applyDiff(CoinWarmStartDiff const*)
(CoinWarmStartBasis.cpp:655)
==19081==    by 0x609419: CbcPartialNodeInfo::applyToModel(CbcModel*,
CoinWarmStartBasis*&, CbcCountRowCut**, int&) const (CbcNode.cpp:744)
==19081==    by 0x5E3457: CbcModel::addCuts1(CbcNode*,
CoinWarmStartBasis*&) (CbcModel.cpp:6154)
==19081==    by 0x61DC63: CbcTree::cleanTree(CbcModel*, double,
double&) (CbcTree.cpp:411)
==19081==    by 0x51D8C6: Bonmin::CbcProbedDiver::cleanTree(CbcModel*,
double, double&) (BonDiver.cpp:417)
==19081==    by 0x5D892A: CbcModel::branchAndBound(int) (CbcModel.cpp:4017)
==19081==    by 0x51869E:
Bonmin::Bab::branchAndBound(Bonmin::BabSetupBase&) (BonCbc.cpp:517)


The incriminated line is (in case you have different line numbers):
CoinMemcpyN(diffA+1+sizeStruct,sizeArtif,artifStatus);
in CoinWarmStartBasis.cpp.
So there is a problem while copying the *artificial* basis information
status. I'm pretty sure that Couenne doesn't change any of the
underlying stuff, and that's why I'm writing to the Cbc mailing list.
Apparently the problem is in determining the basis size (when nodes
are reconstructed to clean the tree), or maybe it's copying too much
stuff. I'm trying to investigate, but if you have any idea about where
this may come from, do let me know.

Thanks

Giacomo



More information about the Cbc mailing list