2014-02-25 117 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參考引用破壞當地的載體。看看你設置參考的代碼。