1
我在這裏得到了aho-corasick算法的代碼:http://www.komodia.com/aho-corasick。使用aho-corasick algorothm發生崩潰?
我用它作爲指南說,添加線條並構建樹。
但是我改變它從使用std wstring到std字符串,但這應該不重要。我只是改變了typedef。
當我使用它並搜索某些東西時,如果找不到結果就沒有問題。當找到結果時,我會得到一個標準超出範圍的異常。
它崩潰的位置:
if (aIterator==pNode->aMap.end())
//No, check if we have failure node
if (!pNode->pFailureNode)
{
//No failure node, start at root again
pNode=&m_aRoot;
//Reset search string
sMatchedString="";
//Did we do a switch?
if (bSwitch)
//We need to do this over
--iCount;
//Exit this loop
break;
}
else
{
//What is the depth difference?
unsigned short usDepth;
usDepth=pNode->usDepth-pNode->pFailureNode->usDepth-1;
//This is how many chars to remove
sMatchedString=sMatchedString.substr(usDepth,sMatchedString.length()-usDepth); //CRASHES HERE!!
//Go to the failure node
pNode=pNode->pFailureNode;
//Set to switch
bSwitch=true;
}
else
{
//Add the char
sMatchedString+=rString[iCount];
//Save the new node
pNode=aIterator->second;
//Exit the loop
break;
}
}
它崩潰的位置:
sMatchedString=sMatchedString.substr(usDepth,sMatchedString.length()-usDepth);
下面是變量:
我用這個來實現的審查遊戲。
什麼可能導致它崩潰?
我有一些字符串添加兩次,可能會導致問題?
由於
投票結束:要求陌生人通過檢查發現代碼中的錯誤並不是富有成效的。您應該使用調試器或打印語句來識別(或至少隔離)問題,然後回來一個更具體的問題(一旦您將其縮小到10行[測試案例](http:///sscce.org))。 –