У меня есть функция, которая проверяет движение других игроков на карте и соответственно корректирует их положение, а также проверяет, если только игрок вступил.std :: vector push_back() вылетает из программы
void mapManager::checkForOtherPlayerMovement(int plyId)
{
sf::Packet receivedPacket;
std::vector<player>::iterator it;
player pl(0,0,1);
if(socket->Receive(receivedPacket) == sf::Socket::Done)
{
int header;
receivedPacket >> header;
switch(header)
{
case PACKET_PLAYER_DISPATCHNEWPOSITION:
{
receivedPacket >> pl;
std::cout << pl.plyId << std::endl;
if(plyId != pl.plyId)
{
try
{
if(pl.plyId != 0)
{
std::cout << "DEBUG1" << std::endl;
players->at(pl.plyId-1).posX = pl.posX;
players->at(pl.plyId-1).posY = pl.posY;
}
else
{
std::cout << "DEBUG2" << std::endl;
players->at(pl.plyId).posX = pl.posX;
players->at(pl.plyId).posY = pl.posY;
}
}
catch(const std::out_of_range& oor)
{
std::cout << "Added new player!" << std::endl;
players->push_back(pl); // This crashes
}
}
break;
}
case PACKET_PLAYER_DISPATCHENTEREDMAP:
{
break;
}
}
}
}
Так что в основном авария происходит, когда новый игрок подключается к серверу, и игра должна добавить его внутри вектора. Странно то, что он не разбился на визуальной студии 2010 года, но падает, когда я перешел на vs 2012, поэтому я должен делать что-то неправильно.
EDIT: Вот как вектор игроков создается
mapManager.h
std::vector<player> * players;
mapManager.cpp
players = new std::vector<player>();
Здесь я использую вектор игроков
void mapManager::drawOtherPlayers(int plyId, player *ownPlayer)
{
ownPlayerSprite->SetPosition(ownPlayer->getX(), ownPlayer->getY());
window.Draw(*ownPlayerSprite);
for(std::vector<player>::iterator it = players->begin(); it != players->end(); ++it)
{
spriteToDraw->SetPosition(it->posX,it->posY);
window.Draw(*spriteToDraw);
}
}
My pla yer class: Player.h and player.cpp
Что такое 'игроки'? –
std :: vector * игроки; players = new std :: vector (); –
Какая ошибка возникает при сбое программы? – asafrob