gpt4 book ai didi

c++ - 如何声明包含队列成员的动态结构数组?

转载 作者:行者123 更新时间:2023-11-30 05:16:05 26 4
gpt4 key购买 nike

这是来自已经上交的家庭作业。该程序是一种纸牌游戏,可以正确玩游戏,但在游戏结束时出现段错误。我可以跟踪核心转储到我的 delete [] playerArr,但我认为真正的问题在于我如何声明我的 playerArr。

我的 .h 文件中有一个构造函数、拷贝、重载运算符和析构函数,它们可以与其他程序很好地配合使用,所以我认为我的问题出在 main.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;

我现在更改此类(class)的成绩为时已晚,而且在期末考试周我没有时间在办公时间拜访我的教授,因此如果有人为我提供解决方案,我可以从这个错误中吸取教训并继续前进。

谢谢

最佳答案

问题的一个可能原因是您忘记了数组索引是从零开始的。

numPlayers 元素数组的索引从 0numPlayers - 1(含)。

您显示的第一个循环没有使用它,而是从 1numPlayers,导致您索引分配的内存越界,从而导致 < em>未定义的行为。

关于c++ - 如何声明包含队列成员的动态结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42825019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com