C ++ Внедренные DLL-файлы повреждены

В настоящее время я пытаюсь добавить некоторые функциональные возможности в базовое серверное приложение, вводя DLL и отключая несколько функций, и у меня возникает проблема с повреждением сохраненного IP-адреса между двумя вызовами.

Сначала я обхожу «принять» и анализирую некоторые значения, затем вводю их в класс соединения и добавляю его в список.

Принять функцию объезда:

std::list<Connection*> ConnectionsList;
SOCKET WINAPI MyAccept(SOCKET s, sockaddr *addr, int *addrlen)
{
...
ConnectionsList.push_back(new Connection(ClientSocket, ipstr));
...
}

класс подключения:

SOCKET s;
char * ipAddress;
char * playerName;
Connection::Connection(SOCKET sock, char * address)
{
s = sock;
ipAddress = address;
}

Начните

Я также удалил ‘closesocket’, после чего я хотел бы удалить сокет из списка соединений. Если я остановлюсь на этой функции, то IP-адрес будет поврежден.

конец

Кто-нибудь знает, почему это происходит?

0

Решение

ipAddress = address; будет просто скопировать указатель. Если что-то изменит то, на что оно указывает, у вас будут проблемы.

Так как это C ++, может быть безопаснее использовать std::string,

std::string ipAdreess;
...
ipAddress = address;

Иначе, stdcpy в буфер достаточно большой.

Кстати, что удаляет все Connection* из списка?

0

Другие решения

попытаться защитить свой ConnectionList и т.д. статическая / глобальная переменная с блокировкой.

0