2014-02-25 63 views
0

好了,所以我有,是为了增加玩家的一个载体,但每当我打电话的push_back功能我得到一个内存访问违规线程,我已经采取了所有其它的代码,其中的矢量正在这个线程之外使用。不能的push_back插入参考矢量

我可以读取向量的大小出现这种情况之前,但我就是不能的push_back进去。

的载体是这样的:

std::vector<A_Player> &clientsRef; 

ADN线程,这是在是:

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; 
} 

}

谁能给我一些见解,为什么这不工作?

亲切的问候

+1

这是如何引用初始化(标准::矢量&clientsRef是一个参考,必须初始化)? –

+0

通过构造函数 –

+1

不,引用没有构造函数。看看'&'标志。这使得clientsRef一个基准和一个编译器应该抱怨像'的std ::矢量&clientsRef一条线;',因为clientsRef未初始化。 –

回答

0

我发现,引用不会对我有问题,工作,我把它转换成工作正常的指针系统。

1

我的心理调试技巧告诉我,你的clientsRef参考引用破坏当地的载体。看看你设置参考的代码。