Skip to content

Commit 29b3f47

Browse files
R-PelegReuven Peleg
andauthored
Fix a memory leak by introducing destructor for InputQueryBuilder (#860)
* Fix a memory leak by introducing destructor for InputQueryBuilder * Clear lists after building Query in InputQueryBuilder. This way the responsibility for deleting items there is passed to the caller. --------- Co-authored-by: Reuven Peleg <reuvenp@mobileye.com>
1 parent 4a55e69 commit 29b3f47

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

src/input_parsers/InputQueryBuilder.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,18 +133,21 @@ void InputQueryBuilder::generateQuery( IQuery &query )
133133
query.markInputVariable( inputVar, i );
134134
i++;
135135
}
136+
_inputVars.clear();
136137

137138
int j = 0;
138139
for ( Variable outputVar : _outputVars )
139140
{
140141
query.markOutputVariable( outputVar, j );
141142
j++;
142143
}
144+
_outputVars.clear();
143145

144146
for ( Equation equation : _equationList )
145147
{
146148
query.addEquation( equation );
147149
}
150+
_equationList.clear();
148151

149152
for ( ReluConstraint *constraintPtr : _reluList )
150153
{
@@ -154,6 +157,7 @@ void InputQueryBuilder::generateQuery( IQuery &query )
154157
} );
155158
query.addPiecewiseLinearConstraint( constraintPtr );
156159
}
160+
_reluList.clear();
157161

158162
for ( LeakyReluConstraint *constraintPtr : _leakyReluList )
159163
{
@@ -163,6 +167,7 @@ void InputQueryBuilder::generateQuery( IQuery &query )
163167
} );
164168
query.addPiecewiseLinearConstraint( constraintPtr );
165169
}
170+
_leakyReluList.clear();
166171

167172
for ( SigmoidConstraint *constraintPtr : _sigmoidList )
168173
{
@@ -172,6 +177,7 @@ void InputQueryBuilder::generateQuery( IQuery &query )
172177
} );
173178
query.addNonlinearConstraint( constraintPtr );
174179
}
180+
_sigmoidList.clear();
175181

176182
for ( MaxConstraint *constraintPtr : _maxList )
177183
{
@@ -185,6 +191,7 @@ void InputQueryBuilder::generateQuery( IQuery &query )
185191
} );
186192
query.addPiecewiseLinearConstraint( constraintPtr );
187193
}
194+
_maxList.clear();
188195

189196
for ( AbsoluteValueConstraint *constraintPtr : _absList )
190197
{
@@ -194,6 +201,7 @@ void InputQueryBuilder::generateQuery( IQuery &query )
194201
} );
195202
query.addPiecewiseLinearConstraint( constraintPtr );
196203
}
204+
_absList.clear();
197205

198206
for ( SignConstraint *constraintPtr : _signList )
199207
{
@@ -203,6 +211,7 @@ void InputQueryBuilder::generateQuery( IQuery &query )
203211
} );
204212
query.addPiecewiseLinearConstraint( constraintPtr );
205213
}
214+
_signList.clear();
206215

207216
// TODO check this last two
208217
for ( std::pair<Variable, float> lower : _lowerBounds )
@@ -231,3 +240,42 @@ Equation *InputQueryBuilder::findEquationWithOutputVariable( Variable variable )
231240
}
232241
return NULL;
233242
}
243+
244+
InputQueryBuilder::~InputQueryBuilder()
245+
{
246+
for ( ReluConstraint *constraintPtr : _reluList )
247+
{
248+
delete constraintPtr;
249+
}
250+
_reluList = {};
251+
252+
for ( LeakyReluConstraint *constraintPtr : _leakyReluList )
253+
{
254+
delete constraintPtr;
255+
}
256+
_leakyReluList = {};
257+
258+
for ( SigmoidConstraint *constraintPtr : _sigmoidList )
259+
{
260+
delete constraintPtr;
261+
}
262+
_sigmoidList = {};
263+
264+
for ( MaxConstraint *constraintPtr : _maxList )
265+
{
266+
delete constraintPtr;
267+
}
268+
_maxList = {};
269+
270+
for ( AbsoluteValueConstraint *constraintPtr : _absList )
271+
{
272+
delete constraintPtr;
273+
}
274+
_absList = {};
275+
276+
for ( SignConstraint *constraintPtr : _signList )
277+
{
278+
delete constraintPtr;
279+
}
280+
_signList = {};
281+
}

src/input_parsers/InputQueryBuilder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ class InputQueryBuilder
7575
void generateQuery( IQuery &query );
7676

7777
Equation *findEquationWithOutputVariable( Variable variable );
78+
virtual ~InputQueryBuilder();
7879
};
7980

8081
#endif // __InputQueryBuilder_h__

0 commit comments

Comments
 (0)