好了,所以我有,是爲了增加玩家的一個載體,但每當我打電話的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;
}
}
誰能給我一些見解,爲什麼這不工作?
親切的問候
這是如何引用初始化(標準::矢量&clientsRef是一個參考,必須初始化)? –
通過構造函數 –
不,引用沒有構造函數。看看'&'標誌。這使得clientsRef一個基準和一個編譯器應該抱怨像'的std ::矢量&clientsRef一條線;',因爲clientsRef未初始化。 –