好吧所以我有一个线程可以添加到一个玩家的矢量但是每当我调用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;
}
}
任何人都可以告诉我为什么这不起作用吗?
亲切的问候
答案 0 :(得分:1)
我的通灵调试技巧告诉我你的clientsRef
引用引用了一个被破坏的本地向量。看一下设置引用的代码。
答案 1 :(得分:0)
我发现引用不适用于我遇到的问题,并将其转换为指针系统,工作正常。