Avoid accessing removed character on deleting last save

This commit is contained in:
elsid 2025-03-08 00:25:47 +01:00
parent 5f92d520ee
commit 5776eea1b0
No known key found for this signature in database
GPG key ID: B845CB9FEE18AB40
3 changed files with 5 additions and 4 deletions

View file

@ -38,7 +38,7 @@ MWState::Character* MWState::CharacterManager::getCurrentCharacter()
return mCurrent; return mCurrent;
} }
void MWState::CharacterManager::deleteSlot(const MWState::Character* character, const MWState::Slot* slot) void MWState::CharacterManager::deleteSlot(const MWState::Slot* slot, const MWState::Character*& character)
{ {
std::list<Character>::iterator it = findCharacter(character); std::list<Character>::iterator it = findCharacter(character);
@ -51,6 +51,7 @@ void MWState::CharacterManager::deleteSlot(const MWState::Character* character,
if (character == mCurrent) if (character == mCurrent)
mCurrent = nullptr; mCurrent = nullptr;
mCharacters.erase(it); mCharacters.erase(it);
character = nullptr;
} }
} }

View file

@ -33,7 +33,7 @@ namespace MWState
Character* getCurrentCharacter(); Character* getCurrentCharacter();
///< @note May return null ///< @note May return null
void deleteSlot(const MWState::Character* character, const MWState::Slot* slot); void deleteSlot(const MWState::Slot* slot, const Character*& character);
Character* createCharacter(const std::string& name); Character* createCharacter(const std::string& name);
///< Create new character within saved game management ///< Create new character within saved game management

View file

@ -706,10 +706,10 @@ void MWState::StateManager::quickLoad()
void MWState::StateManager::deleteGame(const MWState::Character* character, const MWState::Slot* slot) void MWState::StateManager::deleteGame(const MWState::Character* character, const MWState::Slot* slot)
{ {
const std::filesystem::path savePath = slot->mPath; const std::filesystem::path savePath = slot->mPath;
mCharacterManager.deleteSlot(character, slot); mCharacterManager.deleteSlot(slot, character);
if (mLastSavegame == savePath) if (mLastSavegame == savePath)
{ {
if (character->begin() != character->end()) if (character != nullptr)
mLastSavegame = character->begin()->mPath; mLastSavegame = character->begin()->mPath;
else else
mLastSavegame.clear(); mLastSavegame.clear();