2017-03-16 56 views
1

这是来自已经接通的家庭作业。该程序是一款卡片游戏,可以在游戏结束时正确播放,但可以播放seg游戏。我可以将核心转储追踪到我的delete [] playerArr,但我认为真正的问题在于我如何声明我的playerArr。如何声明包含Queue成员的动态数组结构?

我有一个构造函数,复制,重载运算符和析构函数在我的.h文件,与其他程序很好,所以我认为我的问题是主要的。我在这里和谷歌浏览过其他几个问题,并没有找到一个像这样的问题。这里是代码片段:

struct Player 
{ 
    int currentHand; //current number of cards in given player's hand 
    Queue hand;   //queue to store player's hand 
}; 

在主要我分配一个结构数组,我认为这是我的问题。我已经尝试和出错了各种办法,但这个让我的程序进行编译和设计我的游戏玩法:

//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

每当你想到“动态数组”时,你的下一个想法应该总是* [[std :: vector]](http://en.cppreference.com/w/cpp/container/vector)。 –

回答

1

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

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

告诉你不使用,而是如果顺利从1numPlayers,导致你的索引分配的内存越界导致未定义行为第一个循环。