我正在尝试通过注入DLL并绕过几个函数来为基本服务器应用程序添加一些功能,并且我遇到了存储的IP地址在2次调用之间损坏的问题。
首先,我绕道'接受'并解析一些值然后将它们输入连接类并将其添加到列表中。
接受绕行功能:
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 :(得分:0)
ipAddress = address;
只会复制指针。如果其他东西改变了它指向的东西,你就会遇到麻烦。
由于这是C ++,因此使用std::string
可能是最安全的。
std::string ipAdreess;
...
ipAddress = address;
否则,stdcpy
进入一个足够大的缓冲区。
BTW,从列表中删除所有Connection*
的内容是什么?
答案 1 :(得分:0)
尝试使用锁保护您的ConnectionList
等静态/全局变量。