BUGFIX: fix ScoreComponentCollection::ZeroAll(), affecting MIRA

I observed a bug that ScoreComponentCollection core entries would retain their score even after ZeroAll().  This may have affected the Moses implementation of MIRA.

* std::valarray::resize(0) means "resize to 0" [1]
* subsequent accesses using operator[] result in undefined behavior [2]

FeatureVector::clear() is used by ScoreComponentCollection::ZeroAll(), which in turn was used in these places:

./contrib/mira/Main.cpp:665:      cumulativeWeights.ZeroAll();
./contrib/mira/Main.cpp:666:      cumulativeWeightsBinary.ZeroAll();
./moses/Incremental.cpp:580:  features.ZeroAll();

It seems to me that the Moses implementation of MIRA may have been affected?

[1] http://www.cplusplus.com/reference/valarray/valarray/resize/
[2] http://www.cplusplus.com/reference/valarray/valarray/operator%5B%5D/
This commit is contained in:
David Madl 2016-03-21 19:35:12 +01:00
parent 000de1c1dd
commit b760ad8a7e

View File

@ -175,7 +175,7 @@ void FVector::resize(size_t newsize)
void FVector::clear()
{
m_coreFeatures.resize(0);
m_coreFeatures.resize(m_coreFeatures.size(), 0);
m_features.clear();
}