我试着像平常一样整洁地设置我的代码,但现在我在运行时遇到了这个错误
First-chance exception at 0x01313D46 in Server.exe: 0xC0000005: Access violation reading location 0xCCCCCCCC.Visual studio还在“本地变量”框中告诉我,它无法读取
unsigned short port
bool listening下面是出现错误的头部和Cpp
#pragma once
#include <SFML\Network.hpp>
#include <iostream>
using namespace std;
class NetServer
{
private:
bool listening;
unsigned short port;
public:
NetServer(void);
~NetServer(void);
void InitNetServer();
void SetListening(bool a)
{
a = listening;
}
bool IsListening()
{
return listening;
}
void SetPort(unsigned short a)
{
a = port;
}
int GetPort()
{
return port;
}
};当调试器的SetListening(bool a)太大时,它就会中断,如果我把它去掉,它就会在SetPort处中断
这是我的Cpp
#include "NetServer.h"
sf::TcpListener listener;
sf::TcpSocket client;
NetServer::NetServer(void)
{
//listener.listen(21025);
//cout << "listening" << endl;
while (true)
{
if (listener.accept(client) == sf::Socket::Done)
{
cout << "New connection received from " << client.getRemoteAddress() << endl;
}
}
}
NetServer::~NetServer(void)
{
SetPort(NULL);
SetListening(false);
}
void NetServer::InitNetServer()
{
cout << "Initialising the NetServer" << endl;
SetListening(true);
SetPort(45000);
listener.listen(GetPort());
cout << "NetServer Initialised : Listening on Port "<< GetPort() << endl;
}这是我唯一的另一个类,在GameServer.h/cpp中也被称为
#include "GameServer.h"
GameServer::GameServer()
{
Run();
}
GameServer::~GameServer(void)
{
DestroyNetServer();
Exit();
}
void GameServer::Run()
{
cout << "Initialising the engine." << endl;
/* Initialise stuff here */
_NetServer->InitNetServer();
/* Finish initialisation */
SetGameRunning(true);
while(GetGameRunning() == true)
{
_NetServer;
}
}
void GameServer::Exit()
{
exit(0);
}
NetServer & GameServer::GetNetServer()
{
if(_NetServer == 0) throw exception ("Null Game Server");
return *_NetServer;
}
void GameServer::CreateNetServer()
{
_NetServer = new NetServer();
}
void GameServer::DestroyNetServer()
{
delete _NetServer;
}
#pragma once
#include "NetServer.h"
#include <iostream>
using namespace std;
class NetServer;
class GameServer
{
public:
GameServer();
~GameServer(void);
void Run();
void Exit();
void SetGameRunning(bool running)
{
gameRunning = running;
}
bool GetGameRunning()
{
return gameRunning;
}
void CreateNetServer();
NetServer & GetNetServer();
void DestroyNetServer();
private:
bool gameRunning;
NetServer * _NetServer;
};发布于 2013-09-09 06:59:17
Run在构造函数中被调用,没有人初始化_NetServer指针。因此,您正在尝试调用一个未初始化对象的方法。在调用Run()之前添加CreateNetServer
GameServer::GameServer()
{
CreateNetServer()
Run();
}发布于 2013-09-12 15:49:20
看起来你从来没有初始化过listening或port。即使你的setter方法也帮不了你,因为赋值是颠倒的(你给本地参数赋值,而不是把值复制给实例成员)。
例如:
void SetListening(bool a)
{
a = listening;
}应该是:
void SetListening(bool a)
{
listening = a;
}除了修复setter之外,要修复从不赋值listening或port值的问题,还需要在constructor initialization list中这样做
NetServer::NetServer(void)
: listening(false)
, port(0)
{
//listener.listen(21025);
//cout << "listening" << endl;
while (true)
{
if (listener.accept(client) == sf::Socket::Done)
{
cout << "New connection received from " << client.getRemoteAddress() << endl;
}
}
}此外,我甚至不知道这段代码的目的是什么,但它看起来是错误的:
while(GetGameRunning() == true)
{
_NetServer;
}https://stackoverflow.com/questions/18688740
复制相似问题