我已经半天苦苦挣扎并且没有改善,所以在这里: 我有一个名为Network Handler的类,它将处理我在SDL中制作的游戏中的所有网络连接,我使用SDL_Net进行所有网络连接。这是我的标题类:
#ifndef NETWORK_HANDLER
#define NETWORK_HANDLER
#include <iostream>
#include <string>
#include <SDL_net.h>
using namespace std;
class NetworkHandler
{
public:
NetworkHandler();
~NetworkHandler(){}
bool Initialize(bool pIsServer);
void CheckForMessages();
void exit();
private:
UDPpacket* m_packet;
UDPsocket m_socket;
};
#endif
这是我的班级代码:
#include "NetworkHandler.h"
NetworkHandler::NetworkHandler():m_packet(new UDPpacket()),m_socket(0)
{
}
bool NetworkHandler::Initialize(bool pIsServer)
{
//Initialize SDL_net
if(SDLNet_Init() < 0)
{
std::cerr<< "SDL Net Error:"<< SDLNet_GetError() << std::endl;
return false;
}
atexit(SDLNet_Quit);
std::cout<< "SDL Net Error:"<< SDLNet_GetError() << std::endl;
m_socket = SDLNet_UDP_Open(2000);
if(!m_socket)
{
std::cerr<< "Socket Error:" <<SDLNet_GetError()<<std::endl;
return false;
}
if(!(m_packet = SDLNet_AllocPacket(512)))
{
std::cerr<<"Packet Error:"<<SDLNet_GetError()<<std::endl;
}
if(!pIsServer)
{
IPaddress ip_server;
if(SDLNet_ResolveHost(&ip_server,"10.167.193.140",2000)<0)
{
std::cerr<<"Failed to connect to Server: " << SDLNet_GetError() <<endl;
return false;
}
}
return true;
}
void NetworkHandler::CheckForMessages()
{
if(SDLNet_UDP_Recv(m_socket,m_packet))
{
std::cout<<m_packet->data<<std::endl;
}
}
void NetworkHandler::exit()
{
SDLNet_FreePacket(m_packet);
SDLNet_Quit();
}
我收到以下错误: NetworkGameDevelopmenProject.exe中0x00a3e524处的未处理异常:0xC0000005:访问冲突写入位置0xcdcdcdd1。
在这一行:
m_socket = SDLNet_UDP_Open(2000);
当我在调试期间查看m_socket时,它附加了以下错误:
m_socket CXX0076: Error:
我已经尝试过清洁和重建。有趣的是,如果我在本地声明m_socket和m_packet(在函数内部),它不会给我任何错误。谁能想到为什么会这样?