访问违规读取位置 0xCCCCCCCC.using bool & unsigned short
Access violation reading location 0xCCCCCCCC.using bool & unsigned short
所以我试图整齐地设置我的代码,做我通常做的事情,但现在我在运行时收到此错误
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 <SFMLNetwork.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;
};
Run 在构造函数中调用,没有人初始化_NetServer指针。因此,您正在尝试调用未启动对象的方法。在调用 Run() 之前添加 CreateNetServer
GameServer::GameServer()
{
CreateNetServer()
Run();
}
看起来你从不初始化listening
或port
。甚至您的 setter 方法也无济于事,因为赋值是翻转的(您正在将值分配给本地参数,而不是将值复制到您的实例成员)。
例如:
void SetListening(bool a)
{
a = listening;
}
应该是:
void SetListening(bool a)
{
listening = a;
}
除了修复 setter 之外,要解决从不分配 listening
或 port
值的问题,您需要在构造函数初始化列表中执行此操作:
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;
}
相关文章:
- 写入向量<向量<bool>>
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 让bool方法返回其他整数
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 如何在 std::vector 中找到<bool>哪些索引是真的?
- Arduino-C++ bool 不会从 false 变为 true
- 为什么在这种情况下,bool 类型的输出等于 0?
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- 错误:不能使用"显式"说明符声明 bool'
- 为什么 C++ 11 在 ios 类中添加了运算符 bool
- 错误:隐式转换更改符号:'int'到'unsigned long'
- 如何使用多次 memcpy 转换回 std::vector<unsigned char>?
- 从标准::字符串到标准::矢量<bool>的快速转换
- 为什么 bool 和 _Bool 如果它们在内存中占用 1 个字节,它们只能存储 0 或 1
- 通过 mpi 发送 c++ 标准::矢量<bool>
- 为什么使用Pool和Bool而不是int8_t或char
- 如何为地图< map<int,int> 、bool > 分配值?
- APInt(unsigned numBits, uint64_t val, bool isSigned = false)
- 访问违规读取位置 0xCCCCCCCC.using bool & unsigned short