2017-03-16 8 views
1

이것은 이미 제출 된 숙제에서 나옵니다.이 프로그램은 게임이 끝났을 때 올바르게 재생되지만 오류가 발생하는 카드 게임입니다. 내 delete [] playerArr에 코어 덤프를 추적 할 수는 있지만 실제로 문제는 내 PlayerArr을 선언하는 방법입니다.큐 멤버가 포함 된 구조체의 동적 배열을 어떻게 선언합니까?

다른 프로그램과 잘 작동하는 내 .h 파일에서 생성자, 복사, 오버로드 된 연산자 및 소멸자가 있습니다. 따라서 문제가 main에 있다고 생각합니다. 나는 여기에 구글과 다른 몇 가지 질문을 봤어 꽤 하나를 찾지 못했습니다. 다음은 코드 스 니펫입니다.

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

하나의 가능한 원인은 당신이 배열 인덱스는 0을 기준으로 잊지이다 주셔서 감사합니다.

요소의 배열은 0에서 numPlayers - 1 (포함)까지의 인덱스를 갖습니다.

색인에 정의되지 않은 동작에 이르게 경계 밖으로 할당 된 메모리를 당신을 선도 1에서 numPlayers에가는 대신하는 경우, 그것을 사용하지 않는 보여주는 첫 번째 루프.