簡體   English   中英

C ++初學者-代碼崩潰的簡單塊,原因未知

[英]C++ Beginner - Simple block of code crashing, reason unknown

這是我遇到麻煩的代碼塊。

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都可以正常工作,不是removepiecesfromhand 我真的無法理解這是怎么回事:(

謝謝你的時間

編輯確定,我發現程序崩潰了。 在上面的源代碼中添加了注釋。

如果手是空的,則此操作:

rand() % hand.size() 

for循環的初始化程序中,將嘗試執行0模,該模實際上是被零除。 那是你的崩潰。

在繼續進行該方法的其余部分之前,添加一個測試以確保手不為空。

也許你想用

 for (size_t numberOfPiecesToTrade = rand() % hand.size() + 1; numberOfPiecesToTrade > 0; --numberOfPiecesToTrade)

使事情變得更清楚。

編輯:如果您以調試模式運行,那您不只是調試嗎? :)此“不響應”消息通常是由無限循環引起的。

Edit2:我不知道我是否正確,但是如果numberOfPiecesToTrade的初始值為1,那么在某些情況下您會錯過numberOfPiecesToTrade!= 0條件嗎? 我不熟悉size_t。

在您的for循環中插入一個斷點,以使您對發生的事情有更好的了解。 我敢打賭,for循環將無限循環並導致程序掛起。

達到斷點時,檢查迭代器變量,看看是否能看到異常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM