所以我正在创建一个扑克游戏,我需要创建一个播放器并为其指定一个名称,然后将指向该播放器的指针推送到矢量中。但是当名称超出范围时,即使名称已经分配,玩家也不会拥有名称。
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语句时,分配给播放器的名称不再存在。
答案 0 :(得分: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
。