mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2024-12-26 13:23:25 +03:00
Fix a segmentation fault produced when both 'constraint' and
'translation-details' are used, and no hypothesis that matches the reference translation is found. The problem resulted from a missing check if a vector is empty before incrementing its iterator. git-svn-id: https://mosesdecoder.svn.sourceforge.net/svnroot/mosesdecoder/trunk@3950 1f5c12ca-751b-0410-a591-d2e778427230
This commit is contained in:
parent
a836747b4e
commit
83d02c11c6
@ -16,14 +16,17 @@ void PrintTranslationAnalysis(const TranslationSystem* system, std::ostream &os,
|
|||||||
{
|
{
|
||||||
os << std::endl << "TRANSLATION HYPOTHESIS DETAILS:" << std::endl;
|
os << std::endl << "TRANSLATION HYPOTHESIS DETAILS:" << std::endl;
|
||||||
std::vector<const Hypothesis*> translationPath;
|
std::vector<const Hypothesis*> translationPath;
|
||||||
|
|
||||||
while (hypo) {
|
while (hypo) {
|
||||||
translationPath.push_back(hypo);
|
translationPath.push_back(hypo);
|
||||||
hypo = hypo->GetPrevHypo();
|
hypo = hypo->GetPrevHypo();
|
||||||
}
|
}
|
||||||
std::reverse(translationPath.begin(), translationPath.end());
|
|
||||||
|
|
||||||
|
std::reverse(translationPath.begin(), translationPath.end());
|
||||||
std::vector<std::string> droppedWords;
|
std::vector<std::string> droppedWords;
|
||||||
std::vector<const Hypothesis*>::iterator tpi = translationPath.begin();
|
std::vector<const Hypothesis*>::iterator tpi = translationPath.begin();
|
||||||
|
if(tpi == translationPath.end())
|
||||||
|
return;
|
||||||
++tpi; // skip initial translation state
|
++tpi; // skip initial translation state
|
||||||
std::vector<std::string> sourceMap;
|
std::vector<std::string> sourceMap;
|
||||||
std::vector<std::string> targetMap;
|
std::vector<std::string> targetMap;
|
||||||
@ -39,9 +42,7 @@ void PrintTranslationAnalysis(const TranslationSystem* system, std::ostream &os,
|
|||||||
std::string source = (*tpi)->GetSourcePhraseStringRep();
|
std::string source = (*tpi)->GetSourcePhraseStringRep();
|
||||||
WordsRange twr = (*tpi)->GetCurrTargetWordsRange();
|
WordsRange twr = (*tpi)->GetCurrTargetWordsRange();
|
||||||
WordsRange swr = (*tpi)->GetCurrSourceWordsRange();
|
WordsRange swr = (*tpi)->GetCurrSourceWordsRange();
|
||||||
|
|
||||||
const AlignmentInfo &alignmentInfo = (*tpi)->GetCurrTargetPhrase().GetAlignmentInfo();
|
const AlignmentInfo &alignmentInfo = (*tpi)->GetCurrTargetPhrase().GetAlignmentInfo();
|
||||||
|
|
||||||
// language model backoff stats,
|
// language model backoff stats,
|
||||||
if (doLMStats) {
|
if (doLMStats) {
|
||||||
std::vector<std::vector<unsigned int> >& lmstats = *(*tpi)->GetLMStats();
|
std::vector<std::vector<unsigned int> >& lmstats = *(*tpi)->GetLMStats();
|
||||||
@ -56,7 +57,7 @@ void PrintTranslationAnalysis(const TranslationSystem* system, std::ostream &os,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool epsilon = false;
|
bool epsilon = false;
|
||||||
if (target == "") {
|
if (target == "") {
|
||||||
target="<EPSILON>";
|
target="<EPSILON>";
|
||||||
|
Loading…
Reference in New Issue
Block a user