[英]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;
}
我相信代碼是很容易解釋的。
fillhand
和removepiecesfromhand
都可以正常工作,不是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.