C ++ Beginner - 简单的代码块崩溃,原因未知

时间:2010-05-19 18:43:58

标签: c++ oop crash

这是我遇到问题的代码块。

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;
}

我相信代码非常自我解释。

fillhandremovepiecesfromhand工作正常,所以不是这样。 我真的不知道这有什么问题:(

感谢您的时间

修改 好的,我发现程序崩溃的地方。在上面的源代码中添加了评论。

3 个答案:

答案 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循环是无限的,导致程序挂起。

在点击断点时,检查你的迭代器变量,看看你是否能看到任何不寻常的东西