这是来自已经上交的家庭作业。该程序是一款能够正确播放但在游戏结束时出现故障的纸牌游戏。我可以将核心转储跟踪到我的delete [] playerArr,但我认为真正的问题在于我如何声明我的playerArr。
我的.h文件中有一个构造函数,复制,重载运算符和析构函数,它与其他程序运行良好,所以我认为我的问题是主要的。我在这里查看了其他几个问题,谷歌和避风港发现了一个非常类似的问题。以下是代码段:
struct Player
{
int currentHand; //current number of cards in given player's hand
Queue hand; //queue to store player's hand
};
在main中我分配了一个结构数组,我认为这是我的问题。我试用了各种各样的方法,但是这个方法允许我的程序编译和我的游戏按照设计进行游戏:
//allocate array of Player structs
Player *playerArr = new Player[numPlayers];
for (int i = 1; i <= numPlayers; i++)
playerArr[i].currentHand = 0;
//enqueue playerArr.hand
deal(playerArr, deck, numPlayers, currentDeck);
这是我在删除之前用来清理的序列,cout后的核心转储:
//exit do-while loop and end game
}
while (playerArr[currentPlayer - 1].currentHand != 0);
for (int i = 1; i < numPlayers; i++)
{
while (playerArr[i].currentHand > 0)
{
playerArr[i].hand.dequeue(catchQ);
playerArr[i].currentHand--;
}
}
//empty all deck/discard stacks
while (!deck.isEmpty())
deck.pop(catchPop);
while (!discard.isEmpty())
discard.pop(catchPop);
//reset hand/deck counters to defaults
catchQ = 0;
catchPop = 0;
currentDeck = 52;
currentPlayer = 1;
numPlayers = 2;
cout << "\n\n\n\t Good Game!" << endl << endl;
//free dynamic memory
delete [] playerArr;
我改变这个课程的成绩已经太迟了,在决赛周我没有时间在办公时间访问我的教授所以如果有人为我提供解决方案,我可以向他学习这个错误继续前进。
谢谢
答案 0 :(得分:1)
问题的一个可能原因是您忘记了数组索引是从零开始的。
numPlayers
元素数组的索引从0
到numPlayers - 1
(包括)。
您显示的第一个循环不使用它,而是从1
转到numPlayers
,导致您将分配的内存索引越界,导致未定义的行为