首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问冲突读取位置0xCCCCCCCC.using布尔值和无符号短值

访问冲突读取位置0xCCCCCCCC.using布尔值和无符号短值
EN

Stack Overflow用户
提问于 2013-09-09 05:18:00
回答 2查看 1.1K关注 0票数 0

我试着像平常一样整洁地设置我的代码,但现在我在运行时遇到了这个错误

代码语言:javascript
复制
First-chance exception at 0x01313D46 in Server.exe: 0xC0000005: Access violation reading location 0xCCCCCCCC.

Visual studio还在“本地变量”框中告诉我,它无法读取

代码语言:javascript
复制
unsigned short port
bool listening

下面是出现错误的头部和Cpp

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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中也被称为

代码语言:javascript
复制
    #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;
};
EN

回答 2

Stack Overflow用户

发布于 2013-09-09 06:59:17

Run在构造函数中被调用,没有人初始化_NetServer指针。因此,您正在尝试调用一个未初始化对象的方法。在调用Run()之前添加CreateNetServer

代码语言:javascript
复制
GameServer::GameServer()
{
  CreateNetServer()
  Run();
}
票数 0
EN

Stack Overflow用户

发布于 2013-09-12 15:49:20

看起来你从来没有初始化过listeningport。即使你的setter方法也帮不了你,因为赋值是颠倒的(你给本地参数赋值,而不是把值复制给实例成员)。

例如:

代码语言:javascript
复制
void SetListening(bool a)
{
    a = listening;
}

应该是:

代码语言:javascript
复制
void SetListening(bool a)
{
    listening = a;
}

除了修复setter之外,要修复从不赋值listeningport值的问题,还需要在constructor initialization list中这样做

代码语言:javascript
复制
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;
        }
    }
}

此外,我甚至不知道这段代码的目的是什么,但它看起来是错误的:

代码语言:javascript
复制
while(GetGameRunning() == true)
{
    _NetServer;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18688740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档