我正在使用Visual Studio 2017,并在虚幻的引擎编码标准下进行编码,并抛出一个未处理的异常,并将无效参数传递给一个认为它们致命的函数。我无法弄明白,VS2017调试器完全没用,我对编码很新,有人可以给我一些建议吗?编辑:我唯一可以接近发现的是,它似乎是由于字符串超出范围而导致由于下面函数中某处的无限循环而引起的。
FBullCowCount FBullCowGame::SubmitGuess(FText Guess)
{
// increment the turn number
MyCurrentTry++;
// setup a return variable
FBullCowCount BullCowCount;
// loop through all letters in the guess
int32 HiddenWordLength = MyHiddenWord.length();
for (int32 MHWChar = 0; MHWChar < HiddenWordLength; MHWChar++) {
// compare letters against the hidden word
for (int32 GChar = 0; GChar < HiddenWordLength; GChar++) {
//if they match then
if (Guess[MHWChar] == MyHiddenWord[MHWChar])
{
//increment bulls if they're in the same place
if (MHWChar == GChar) {
BullCowCount.Bulls++;
}
else {
BullCowCount.Cows++;
}
}
} //increment cows if not
}
return BullCowCount;
}
答案 0 :(得分:0)
您的代码评论说&#34;遍历猜测中的所有字母&#34;,但您的代码会循环遍历MyHiddenWord
的所有字母。这意味着,除非Guess
和MyHiddenWord
具有完全相同的长度,否则:
if (Guess[MHWChar] == MyHiddenWord[MHWChar])
会在某个时刻访问Guess
超出范围的元素,如果FText
碰巧使用范围检查{{} operator[]
,这可能是异常的原因1}}。
你可能想要的是:
#include <algorithm>
// ...
auto HiddenWordLength = std::min(MyHiddenWord.length(), Guess.length());
它会将循环的字母数限制为两个字符串中较短的一个。