在引发 'std::out_of_range' 实例后不断被终止调用
Keeps on getting terminate called after throwing an instance of 'std::out_of_range'
bool GameUtil::isValidPath(std::vector<int>& path, Player* player, Game* game) {
///**Get borad*/
std::vector<Square*> board = game->getBoard();
int maxDistanceTravel = 0;
int playerCanTravel = 0;
//first square and last square must be present
if (path[0] == 0 && path[path.size() - 1] == (board.size() - 1)) {
for (int i = 0; i < path.size() - 1; i++) {
/**Max distance of each board from player*/
maxDistanceTravel = compute(board.at(path[i]), player);
playerCanTravel = path[i + 1] - path[i];
if ((playerCanTravel > maxDistanceTravel) && (playerCanTravel <= 0)) {
return false;
}
}
return true;
}
return false;
}
我是一个新的c++学习者,我一遍又一遍地得到同样的错误,但无法弄清楚是什么错了,它不是明显的一个超出范围,请帮助,谢谢。
我将首先尝试做一些早期检查,以确保您的输入是有效的。比如:
bool GameUtil::isValidPath(std::vector<int>& path, Player* player, Game* game) {
assert(!path.empty());
if (path.size() < 2) return false; // or whatever your minimum size is.
只要您在这里,您可能应该删除其他输入。
bool GameUtil::isValidPath(std::vector<int>& path, Player* player, Game* game) {
assert(!path.empty());
assert(game);
assert(player);
if (path.size() < 2) return false; // or whatever your minimum size is.
我有一个经验法则,使用引用的参数永远不应该为空。看起来在你的代码中,游戏是不允许为空的。所以也许你可以改变函数:
bool GameUtil::isValidPath(std::vector<int>& path, Player& player, Game& game) {
assert(!path.empty());
if (path.size() < 2) return false; // or whatever your minimum size is.
然后更改呼叫地点。可能在你的代码中有这样的东西:
// somewhere buried in your code:
Game * myGame = .../// however you created it.
Game * myPlayer = .../// however you created it.
GameUtil * myGameUtil = .../// however you created it.
...
auto isValid = myGameUtil->isValidPath(path, myPlayer, myGame);
改成:
// somewhere buried in your code:
Game * myGame = .../// however you created it.
Game * myPlayer = .../// however you created it.
GameUtil * myGameUtil = .../// however you created it.
...
auto isValid = myGameUtil->isValidPath(path, *myPlayer, *myGame);
希望对你有帮助。
相关文章:
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 我收到以下错误:抛出'std::bad_alloc'实例后终止调用
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 在抛出 'std::runtime_error' 的实例后终止调用 what(): Filebuf 和 ostream 的 I/O 错误
- 在字符串函数中抛出'char const*'实例后调用的终止
- 调用 raise(signal) 会终止 c++ 程序
- 在抛出 what() 的实例后调用'std::logic_error'终止:basic_string::_M_construct 空无效
- 抛出实例'std::out_of_range'后调用的终止
- 程序终止时调用函数
- 在抛出 'std::regex_error' 的实例后调用终止 what(): 括号未关闭
- 在抛出 'std::invalid_argument' 的实例后调用终止 what(): stoi 错误 in leet
- CPP-Netlib 问题,在抛出 'boost::exception_detail::clone_impl 的实例后调用终止
- 如何使用管理权限调用终止进程
- 在抛出 'std::bad_alloc' 的实例后调用终止 what(): std::bad_alloc 中止
- 在抛出 'std::bad _alloc' 的实例后调用终止 what(): std::bad_alloc 在 c++ 中
- 的实例抛出后调用终止
- 在没有活动异常的情况下调用c++终止
- 内存管理 - C++错误:抛出"std::bad_alloc"实例后调用终止
- 代码调用终止而不是引发异常