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語句時,分配給該玩家的名稱不再存在。
'player'已不在。任何指向它的指針都懸而未決。 – chris
對於你的向量來說,最好是保存'player'的實際對象而不是指針。 –
添加到克里斯說的,即使你創建一個指向你的播放器的指針(通過獲取它的引用),它不允許它超出函數的範圍。函數返回後,指針指向垃圾。 – AndyG