【问题标题】:unhandled exception, invalid parameter passed to a function that considers invalid paramaters fatal [closed]未处理的异常,传递给认为无效参数致命的函数的无效参数[关闭]
【发布时间】:2025-11-23 05:55:02
【问题描述】:

我正在使用 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;
}

【问题讨论】:

  • 我们是否应该猜测有问题的调用是什么?设身处地为我们着想。想象一下,您从未见过您的整个代码库。想象一下,您只看到了这个。你能找出问题所在吗?
  • “提出建议”不是本网站的运作方式。您应该创建一个minimal reproducible example,让每个人都可以重现错误并验证他们的解决方案是否解决了问题。
  • idk,我只需要比我自己更多的大脑,这个代码块是相当独立的,据我所知,断点完全发生在这个函数中。我想我想知道的主要事情是任何人都可以看到我编写任何循环的方式有任何重大缺陷。
  • 如果你愿意,我可以把我的整个代码放到 github 上
  • 调试不是这样工作的。 VisualStudio 应该指出正在抛出的确切行和函数调用。它还应该破坏(冻结但不终止)您的程序,以便您可以实际查找导致函数抛出的变量的值。如果您在阅读该信息后仍无法找出问题所在,请编辑您的帖子以包含它们,以便我们尝试找出问题所在。

标签: c++ exception breakpoints


【解决方案1】:

您的代码注释说“循环遍历猜测中的所有字母”,但您的代码改为遍历 MyHiddenWord 的所有字母。这意味着除非GuessMyHiddenWord 的长度完全相同,否则:

if (Guess[MHWChar] == MyHiddenWord[MHWChar])

将在某个时候访问超出范围的Guess 元素,如果FText 碰巧使用经过范围检查的operator[],这可能是异常的原因。

你可能想要的是:

#include <algorithm>
// ...

auto HiddenWordLength = std::min(MyHiddenWord.length(), Guess.length());

它将循环的字母数量限制为两个字符串中较短的一个。

【讨论】:

  • 哦,对了,让我看看我是否可以尝试定义 Guess 的长度,因为从技术上讲,它的长度现在设置为 FText Guess = "";然后抓取用户输入的长度。
  • 好的,您的解决方案运行良好,非常感谢
最近更新 更多