不能push_back到引用的向量

时间:2014-02-25 16:38:45

标签: c++ multithreading stdvector

好吧所以我有一个线程可以添加到一个玩家的矢量但是每当我调用push_back函数我得到一个内存访问违规时,我已经取出了所有其他代码,其中向量被使用在此之外线程。

在发生这种情况之前我可以读取矢量的大小,但我不能将其推入其中。

向量看起来像这样:

std::vector<A_Player> &clientsRef;

它所在的主题是:

void NetworkManager::TCPAcceptClient(){
std::cout << "Waiting to accept that client that pinged us" << std::endl;
fd_set fd;
timeval tv;
FD_ZERO(&fd);
FD_SET(TCPListenSocket, &fd);

tv.tv_sec = 5;//seconds
tv.tv_usec = 0;//miliseconds

A_Player thePlayer;
thePlayer.sock = SOCKET_ERROR;

if (select(0, &fd, NULL, NULL, &tv) > 0){ //using select to allow a timeout if the client fails to connect
    if (thePlayer.sock == SOCKET_ERROR){
        thePlayer.sock = accept(TCPListenSocket, NULL, NULL);
    }

    thePlayer.playerNumber = clientsRef.size() + 1;
    thePlayer.isJumping = false;
    thePlayer.X = 0;
    thePlayer.Y = 0;
    thePlayer.Z = 0;
    clientsRef.push_back(thePlayer);

    clientHandler = std::thread(&NetworkManager::ClientRecieve, this);
    clientHandler.detach();
}
else{
    std::cout << "Client connection timed out!!!!!" << std::endl;
}

}

任何人都可以告诉我为什么这不起作用吗?

亲切的问候

2 个答案:

答案 0 :(得分:1)

我的通灵调试技巧告诉我你的clientsRef引用引用了一个被破坏的本地向量。看一下设置引用的代码。

答案 1 :(得分:0)

我发现引用不适用于我遇到的问题,并将其转换为指针系统,工作正常。