对象的变量不再存在于范围之外

时间:2015-04-07 04:02:14

标签: c++ scope

所以我正在创建一个扑克游戏,我需要创建一个播放器并为其指定一个名称,然后将指向该播放器的指针推送到矢量中。但是当名称超出范围时,即使名称已经分配,​​玩家也不会拥有名称。

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语句时,分配给播放器的名称不再存在。

1 个答案:

答案 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