리스트 반복자에 대해서 질문입니다.

balgarac1의 이미지

void ThreadServer::socketStart()
{
 
	User userList;
	list<User>::iterator iter;
 
 
	cout << "socket start.. " << endl;
 
	if (listen(servSock, 128) == SOCKET_ERROR)
	{
 
		ErrorHandling("listen()");
 
	} // 
 
 
 
	while (true)
	{
 
 
		clntAddrSize = sizeof(clntAddr);
 
		WaitForSingleObject(hMutex, INFINITE); // mutex
		userList.userSock = accept(servSock, (SOCKADDR *)&clntAddr, &clntAddrSize);
 
		if (userList.userSock == SOCKET_ERROR)
		{
 
			ErrorHandling("accept()");
 
		}
 
 
 
		userList.mode = TRUE; // mode trasition
		userList.userID[0] = '\0';
		userList.clntAddr = clntAddr;
 
		uList.push_back(userList);
 
		for (iter = uList.begin(); iter != uList.end(); iter++)
		{
 
			if (iter->userSock == userList.userSock)
			{
 
				listPtr = iter;
				break;
 
			}
			else
				continue;
 
		}
 
 
		hThread_handleClient = (HANDLE)_beginthreadex(NULL, 0, handleClient, iter, 0, NULL); // 이 부분에서 4번째 인자	
		ReleaseMutex(hMutex);
 
	}
 
}

쓰레드로 list 안에 있는 노드 하나의 주소 값을 인자로 넘기고 싶은데 가능한 방법이 없을까요??
jick의 이미지

&*iter 라고 쓰시면 될 것 같습니다만...

그리고 다음 번엔 웬만하면 컴파일이 되는 버전을 올려주시지요...

MyAbby의 이미지

http://stackoverflow.com/questions/6438086/iterator-invalidation-rules

&*iter 를 쓰시면 됩니다. iter element를 지우기 전까지는 유효한 반복자이고, 그의 참조역시 유효합니다.

balgarac1의 이미지

도움 많이 얻어요^^ 감사합니다.