首页 > 解决方案 > C++ 坏线程访问

问题描述

我有一个项目,其中有多个场景,每个场景代表一个状态,例如启动屏幕、主菜单、关卡等。有一个主 Game 类和一个处理所有场景的 SceneManager。我需要从各个 Scene 类中调用一些 SceneManager 函数,因此我尝试通过指针将 SceneManager 传递给 Scene 类。但是,我不断收到以下错误:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)

我假设我没有正确初始化某些东西并且我导致了错误,但是我很难找到确切的问题并理解它。我在下面包含了相关代码:

获取错误的 SceneManager.cpp 函数:

void SceneManager::SetCurrentScene(Scene* scene) {

    currentScene = scene;

}

游戏.cpp

Game::GameState Game::GAME_STATE = Playing;
sf::RenderWindow Game::mainWindow;
SceneManager* Game::sceneManager;

void Game::Start(void) {

    mainWindow.create(sf::VideoMode(GAME_SCREEN_WIDTH, GAME_SCREEN_HEIGHT,32), GAME_WINDOW_TITLE, sf::Style::Close);

    //make a clock
    sf::Clock deltaClock;

    //load the screen manager
    //screenManager = new ScreenManager();
    sceneManager->SetCurrentScene(new SplashScene(sceneManager)); // <---- This line is the first use of SetCurrentScene()



    while(mainWindow.isOpen()) {

        //get the delta time
        sf::Time deltaTime = deltaClock.restart();
        float delta = deltaTime.asMilliseconds();

        GameLoop(delta);
    }

    mainWindow.close();
}

/*
bool Game::IsExiting()
{
    if(gameState == Game::Exiting)
        return true;
    else
        return false;
}
*/

sf::RenderWindow& Game::GetWindow()
{
    return mainWindow;
}


void Game::GameLoop(float delta) {

    sf::Event currentEvent;
    mainWindow.pollEvent(currentEvent);

    // "close requested" event: we close the window
    if (currentEvent.type == sf::Event::Closed) {
        mainWindow.close();
    }

    //graphics and rendering
    mainWindow.clear(GAME_WINDOW_BUFFER_COLOR);

    //update the current screen
    sceneManager->currentScene->Update(currentEvent, delta);
    sceneManager->currentScene->Draw(mainWindow);

    //display the window
    mainWindow.display();

}

场景.cpp

Scene::Scene() {

    Load();

}


Scene::Scene(SceneManager* sceneManager) {

    this->sceneManager = sceneManager;
    Load();

}


Scene::~Scene() {

}

void Scene::Load() {

}

void Scene::Draw(sf::RenderWindow& renderWindow) {

}

void Scene::Update(sf::Event event, float delta) {

}

谢谢大家的帮助!

标签: c++pointers

解决方案


推荐阅读