Skip to content

Commit 46e92b4

Browse files
YankesMeridianOXC
authored andcommitted
Fix memory leaks
# Conflicts: # src/Geoscape/GeoscapeState.cpp
1 parent ffa06ea commit 46e92b4

2 files changed

Lines changed: 12 additions & 9 deletions

File tree

‎src/Geoscape/GeoscapeState.cpp‎

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1461,8 +1461,8 @@ void GeoscapeState::time1Hour()
14611461
{
14621462
if (j->second > PROGRESS_NOT_COMPLETE)
14631463
{
1464-
(*i)->removeProduction (j->first);
14651464
popup(new ProductionCompleteState((*i), tr(j->first->getRules()->getName()), this, j->second));
1465+
(*i)->removeProduction(j->first);
14661466
}
14671467
}
14681468

@@ -1565,19 +1565,22 @@ void GeoscapeState::time1Day()
15651565
_game->getSavedGame()->getAvailableResearchProjects(before, _game->getMod(), *i);
15661566
}
15671567
// 3. add finished research, including lookups and getonefrees (up to 4x)
1568-
for (std::vector<ResearchProject*>::const_iterator iter = finished.begin(); iter != finished.end(); ++iter)
1568+
for (std::vector<ResearchProject*>::iterator iter = finished.begin(); iter != finished.end(); ++iter)
15691569
{
1570+
const RuleResearch *bonus = 0;
1571+
const RuleResearch *research = (*iter)->getRules();
1572+
15701573
// 3a. remove finished research from the base where it was researched
15711574
(*i)->removeResearch(*iter);
1572-
// 3b. handle interrogations
1573-
RuleResearch * bonus = 0;
1574-
const RuleResearch * research = (*iter)->getRules();
1575+
(*iter) = 0;
1576+
1577+
// 3b. handle interrogation
15751578
if (Options::retainCorpses && research->destroyItem() && _game->getMod()->getUnit(research->getName()))
15761579
{
15771580
(*i)->getStorageItems()->addItem(_game->getMod()->getArmor(_game->getMod()->getUnit(research->getName())->getArmor(), true)->getCorpseGeoscape());
15781581
}
15791582
// 3c. handle getonefrees (topic+lookup)
1580-
if (!(*iter)->getRules()->getGetOneFree().empty())
1583+
if (!research->getGetOneFree().empty())
15811584
{
15821585
std::vector<std::string> possibilities;
15831586
for (std::vector<std::string>::const_iterator f = research->getGetOneFree().begin(); f != research->getGetOneFree().end(); ++f)
@@ -1681,8 +1684,6 @@ void GeoscapeState::time1Day()
16811684
}
16821685
}
16831686
}
1684-
// 3k. remove processed item from the list (and continue with the next item)
1685-
delete(*iter);
16861687
}
16871688

16881689
// Handle soldier wounds

‎src/Savegame/Base.cpp‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1095,20 +1095,22 @@ void Base::removeResearch(ResearchProject * project)
10951095
{
10961096
_research.erase(iter);
10971097
}
1098+
delete project;
10981099
}
10991100

11001101
/**
11011102
* Remove a Production from the Base
11021103
* @param p A pointer to a Production
11031104
*/
1104-
void Base::removeProduction (Production * p)
1105+
void Base::removeProduction(Production * p)
11051106
{
11061107
_engineers += p->getAssignedEngineers();
11071108
std::vector<Production *>::iterator iter = std::find (_productions.begin(), _productions.end(), p);
11081109
if (iter != _productions.end())
11091110
{
11101111
_productions.erase(iter);
11111112
}
1113+
delete p;
11121114
}
11131115

11141116
/**

0 commit comments

Comments
 (0)