这是我遇到问题的代码块。
string Game::tradeRandomPieces(Player & player)
{
string hand = player.getHand();
string piecesRemoved;
size_t index;
//Program crashes while calculating numberOfPiecesToTrade...
size_t numberOfPiecesToTrade = rand() % hand.size() + 1
for (; numberOfPiecesToTrade != 0; --numberOfPiecesToTrade)
{
index = rand() % hand.size();
piecesRemoved += hand[index];
hand.erase(index,1);
}
player.removePiecesFromHand(piecesRemoved);
player.fillHand(_deck);
return piecesRemoved;
}
我相信代码非常自我解释。
fillhand
和removepiecesfromhand
工作正常,所以不是这样。
我真的不知道这有什么问题:(
感谢您的时间
修改 好的,我发现程序崩溃的地方。在上面的源代码中添加了评论。
答案 0 :(得分:3)
如果手是空的,那么这个操作:
rand() % hand.size()
在for
循环的初始值设定项中,将尝试将模数执行0,这基本上除以零。那是你的崩溃。
在继续使用方法的其余部分之前,添加测试以确保指针不为空。
答案 1 :(得分:0)
也许你想用
for (size_t numberOfPiecesToTrade = rand() % hand.size() + 1; numberOfPiecesToTrade > 0; --numberOfPiecesToTrade)
让事情更清楚。
编辑: 如果你在调试模式下运行,那么你不只是调试吗? :) 这种“无响应”的消息通常是由无限循环引起的。
EDIT2: 我不知道我是否正确,但是在某些情况下,如果numberOfPiecesToTrade的初始值为1,你会错过numberOfPiecesToTrade!= 0条件吗?我不熟悉size_t。
答案 2 :(得分:0)
在你的for循环中插入一个断点,让你更好地了解正在发生的事情。我敢打赌,for循环是无限的,导致程序挂起。
在点击断点时,检查你的迭代器变量,看看你是否能看到任何不寻常的东西