使用SDL_Net访问违规写入位置

时间:2014-04-05 14:28:44

标签: c++ visual-studio-2010 sdl

我已经半天苦苦挣扎并且没有改善,所以在这里: 我有一个名为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(在函数内部),它不会给我任何错误。谁能想到为什么会这样?

0 个答案:

没有答案