Skip to content

Commit 4c868ea

Browse files
committed
Fix memory leak when spawning dragons
1 parent 18017d4 commit 4c868ea

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

Source/Terra/geo.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -1515,7 +1515,6 @@ loc_notOverlapped: ;
15151515
int elementGeoBreak::unengagedID=0; //Инициализация уникального ида элемента трещины для поиска родителей при завершении
15161516

15171517
geoBreak1::geoBreak1(int x, int y, int rad, int beginNumBreaks){ //0-случайное кол-во
1518-
elGB.erase(elGB.begin(), elGB.end());//очистка списка элементов трещин
15191518
if(beginNumBreaks==0) beginNumBreaks=2+terLogicRND(MAX_BEGIN_BREAKS-2);//Диапазон от 2 до MAX_BEGIN_BREAKS
15201519

15211520
float range_corner=2*pi/((float)beginNumBreaks);
@@ -1530,6 +1529,13 @@ geoBreak1::geoBreak1(int x, int y, int rad, int beginNumBreaks){ //0-случа
15301529
}
15311530
};
15321531

1532+
geoBreak1::~geoBreak1() {
1533+
for (auto el : elGB) {
1534+
delete el;
1535+
}
1536+
elGB.clear();
1537+
}
1538+
15331539
std::list<elementGeoBreak*>::iterator geoBreak1::delEementGeoBreak(std::list<elementGeoBreak*>::iterator pp)
15341540
{
15351541
int _ownID=(*pp)->ownerID;

Source/Terra/geo.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,7 @@ const float CORNER_DISPERSION_BREAKS=(float)(pi+pi/2);
335335
struct geoBreak1{ //точечный разлом
336336
std::list<elementGeoBreak*> elGB;
337337
geoBreak1(int x, int y, int rad=MAX_LENGHT_ELEMENTGEOBREAK, int beginNumBreaks=0); //0-случайное кол-во
338+
~geoBreak1();
338339
std::list<elementGeoBreak*>::iterator delEementGeoBreak(std::list<elementGeoBreak*>::iterator pp);
339340
int quant(void);
340341
};
@@ -1160,15 +1161,15 @@ struct s_WaspBirthGeoAction {
11601161
radiusCount=0;
11611162
};
11621163
~s_WaspBirthGeoAction(){
1163-
if(pGeoBrk1) delete pGeoBrk1;
1164+
delete pGeoBrk1;
11641165
}
11651166
bool quant(void){
11661167
quantCount++;
11671168

11681169
if((radiusCount<r) && (pGeoBrk1)) {
11691170
if(pGeoBrk1->quant()==0){
11701171
delete pGeoBrk1;
1171-
pGeoBrk1=0;
1172+
pGeoBrk1= nullptr;
11721173
}
11731174
}
11741175
if(quantCount>=WASP_SHIFT_QUANT_FOR_GEOBREAK){

0 commit comments

Comments
 (0)