c++ - 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) {
}
谢谢大家的帮助!
解决方案
推荐阅读
- excel - 根据两个标准将多个值组合到一个单元格中
- python - 在文本文件中搜索。错误:“str”对象不可调用
- python - 为什么我不能在 Python 中使用表情符号作为输入?
- java - 使用毕加索时如何清空ImageURL?
- reactjs - (react-window) 如何包装 {Row}或任何自定义组件?
- python - 我可以使用 selenium.webdriver.Chrome 从 ASDA 网站提取产品信息吗?
- c# - 我如何伪造 Action
- python - shutil.copy 是否识别波浪号 (~) 字符,是否有替代 shutil.copy 识别的波浪号的替代方法?
- go - Go 是否提供与 Threadpool 等效的功能
- google-maps - 指定 API 以默认到离源最近的目的地