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;
}
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);
@ -51,6 +51,7 @@ void MWState::CharacterManager::deleteSlot(const MWState::Character* character,
if (character == mCurrent)
mCurrent = nullptr;
mCharacters.erase(it);
character = nullptr;
}
}

View File

@ -33,7 +33,7 @@ namespace MWState
Character* getCurrentCharacter();
///< @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);
///< 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)
{
const std::filesystem::path savePath = slot->mPath;
mCharacterManager.deleteSlot(character, slot);
mCharacterManager.deleteSlot(slot, character);
if (mLastSavegame == savePath)
{
if (character->begin() != character->end())
if (character != nullptr)
mLastSavegame = character->begin()->mPath;
else
mLastSavegame.clear();