2017-03-16 88 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,導致你的索引分配的內存越界導致未定義行爲第一個循環。