1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-29 23:07:48 +02:00

Fix most of memleaks discovered by valgrind

This commit is contained in:
Ivan Savenko
2023-11-13 12:09:55 +02:00
parent 1192dbff15
commit 20ef3a69e7
18 changed files with 58 additions and 27 deletions

View File

@@ -327,13 +327,21 @@ void CGHeroInstance::initHero(CRandomGenerator & rand)
{
// hero starts with default spellbook presence status
if(!getArt(ArtifactPosition::SPELLBOOK) && type->haveSpellBook)
putArtifact(ArtifactPosition::SPELLBOOK, ArtifactUtils::createNewArtifactInstance(ArtifactID::SPELLBOOK));
{
auto artifact = ArtifactUtils::createNewArtifactInstance(ArtifactID::SPELLBOOK);
cb->gameState()->map->addNewArtifactInstance(artifact);
putArtifact(ArtifactPosition::SPELLBOOK, artifact);
}
}
else
spells -= SpellID::SPELLBOOK_PRESET;
if(!getArt(ArtifactPosition::MACH4))
putArtifact(ArtifactPosition::MACH4, ArtifactUtils::createNewArtifactInstance(ArtifactID::CATAPULT)); //everyone has a catapult
{
auto artifact = ArtifactUtils::createNewArtifactInstance(ArtifactID::CATAPULT);
cb->gameState()->map->addNewArtifactInstance(artifact);
putArtifact(ArtifactPosition::MACH4, artifact); //everyone has a catapult
}
if(!hasBonus(Selector::sourceType()(BonusSource::HERO_BASE_SKILL)))
{
@@ -448,7 +456,11 @@ void CGHeroInstance::initArmy(CRandomGenerator & rand, IArmyDescriptor * dst)
ArtifactPosition slot = art->getPossibleSlots().at(ArtBearer::HERO).front();
if(!getArt(slot))
putArtifact(slot, ArtifactUtils::createNewArtifactInstance(aid));
{
auto artifact = ArtifactUtils::createNewArtifactInstance(aid);
cb->gameState()->map->addNewArtifactInstance(artifact);
putArtifact(slot, artifact);
}
else
logGlobal->warn("Hero %s already has artifact at %d, omitting giving artifact %d", getNameTranslated(), slot.toEnum(), aid.toEnum());
}