2015-04-07 22 views
0

因此,我正在創建一個撲克遊戲,我需要創建一個玩家併爲其分配一個名稱,然後將該玩家的指針指向一個矢量。但是,當名稱超出範圍時,即使名稱已被分配,玩家也不再有名字。對象的變量不再存在於範圍內

void Game::add_player(string& playerName) { 
    Player* finder = find_player(playerName); 
    if (finder == NULL) { 
     char * nameAsCharArray = new char[playerName.length() + NEXT_TO]; 
     strcpy_s(nameAsCharArray, playerName.length() + NEXT_TO, playerName.c_str()); 
     char * name = nameAsCharArray; 
     Player player = Player::Player(name); 
     Player * p(&player); 
     players.push_back(p); 
    } 
    else { 
     throw ALREADY_PLAYING; 
    } 
} 

當代碼擊中else語句時,分配給該玩家的名稱不再存在。

+3

'player'已不在。任何指向它的指針都懸而未決。 – chris

+0

對於你的向量來說,最好是保存'player'的實際對象而不是指針。 –

+0

添加到克里斯說的,即使你創建一個指向你的播放器的指針(通過獲取它的引用),它不允許它超出函數的範圍。函數返回後,指針指向垃圾。 – AndyG

回答

0

而不是

Player player = Player::Player(name); 
    Player * p(&player); 
    players.push_back(p); 

使用

Player* p = new Player(name); 
    players.push_back(p); 

既然你在C++的土地,爲什麼還在爲管理反正char*內存?更改您的班級以使用std::string