2014-03-05 2 views
-2

나는 Game 구조체를 생성하고이 같은 생성자를 통해에서 n 플레이어를 설정하기 위해 노력하고있어에서 구조체의 포인터에 포인터를 액세스 할 수 없습니다 :는 C++

typedef struct _Player 
{ 
    int life; 
    _Player() 
    { 
     life = 3; 
    } 
}Player; 

typedef struct _Game 
{ 
    Player **players; 
    _Game(int n) 
    { 
     *players = new Player[n]; 
     for(int i = 0; i < n; i++) 
     { 
      players[i] = (Player*) malloc(sizeof(Player)); 
      players[i] = new Player(); 
     } 
    } 
}Game; 

int main() 
{ 
    Game *game = new Game(10); 
    printf("%d\n", (game->players[0])->life); 
    getch(); 
    return 0; 
} 

을하지만 그것은 단지 실행에 충돌 시간, 그것을 수정하려고했지만 여전히 이유를 찾을 수 없습니다.

아무도 도와 줄 수 있습니까? 귀하의 답변에 감사드립니다.

당신이 그 기술을 집어 어디 모르겠지만,이 엉망

+1

[예약 식별자] (http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier)를 사용하고 있습니다. 또한, 거기에'malloc '으로 무엇을하려고하는지 모르겠지만'Player'와는 작동하지 않을 것입니다. 가장 쉬운 해결책은 '플레이어'를'std :: vector '으로''게임 '을''게임'으로 변경하는 것입니다. 이 포인터는 전혀 필요하지 않습니다. – chris

+0

그런데 오래된 IDE를 사용하고 있습니다 !! – haccks

+0

c 및 C++을 혼합하십시오. 1. iostream에서 제공하는 C++ - 입출력을 사용해보십시오. 2. 메모리를 두 번 할당 할 필요가 없습니다.'new'만으로 충분합니다. 필요한 공간을 할당 할 것입니다! – urzeit

답변

0

(나는 ++ 데브 - C를 사용하고 있습니다 그런데). 다음을 고려하십시오.

struct Player 
{ 
    int livesLeft; 
    Player() {livesLeft = 3;} 
} 
namespace Game 
{ 
    std::vector<Player> players; 
    bool Initialize(int numPlayers) 
    { 
      for (int i = 0; i < numPlayers; i++) 
      { 
       Player newPlayer; 
       players.push_back(newPlayer); 
      } 
    } 
} 

int main() 
{ 
    if (!Game::Initialize(10)) return 1; 
    std::cout << Game::players[0].livesLeft << std::endl; 
    std::cin.ignore(); 
    return 0; 
} 

"3"이 출력되고 종료되기 전에 입력을 기다려야합니다.