Указатель признан недействительным? - PullRequest
0 голосов
/ 09 марта 2019

У меня проблема с тем, что мои указатели / объекты были признаны недействительными.

У меня есть класс, который содержит std :: vector .

Они находятсяхранится в функции обработчика сообщений, которая напрямую получает доступ к std :: vector.Вот функция: (Socket :: Server * - это thisptr, который был передан каждому принимающему потоку, который затем передается в эту функцию)

static void OnUpdateInGameState( Socket::Server* Server, int Client, const char* Data ) {
    Messages::MessageUpdateInGameState Message( Data );

    for ( auto GameState : Server->m_ClientGameState ) {
        if ( !GameState )
            continue;

        if ( GameState->Client == Client ) {
            GameState->Message.InGame = Message.message( ).InGame;
            snprintf( GameState->Message.Server, sizeof( Message.message( ).Server ), Message.message( ).Server );
            return;
        }
    }

    //No such object found, create it
    Server->m_ClientGameState.push_back( new InGameState_t( Client, Message.message( ) ) );
}

Я пытался использовать умные указатели и другие методыраспределения памяти.Все они привели к тому, что указатель был действителен для 1-5 вызовов, а затем был признан недействительным.

Почему это происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...