Skip to content

Commit 927e45a

Browse files
authored
Fix: memory leak in destructor of Operator (#2013)
1 parent ee5f852 commit 927e45a

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

source/module_hamilt_general/operator.cpp

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,25 @@ Operator<FPTYPE, Device>::~Operator()
1111
{
1212
if(this->hpsi != nullptr) delete this->hpsi;
1313
Operator* last = this->next_op;
14-
while(last != nullptr)
14+
Operator* last_sub = this->next_sub_op;
15+
while(last != nullptr || last_sub != nullptr)
1516
{
16-
Operator* node_delete = last;
17-
last = last->next_op;
18-
node_delete->next_op = nullptr;
19-
delete node_delete;
17+
if(last_sub != nullptr)
18+
{//delete sub_chain first
19+
Operator* node_delete = last_sub;
20+
last_sub = last_sub->next_sub_op;
21+
node_delete->next_sub_op = nullptr;
22+
delete node_delete;
23+
}
24+
else
25+
{//delete main chain if sub_chain is deleted
26+
Operator* node_delete = last;
27+
last_sub = last->next_sub_op;
28+
node_delete->next_sub_op = nullptr;
29+
last = last->next_op;
30+
node_delete->next_op = nullptr;
31+
delete node_delete;
32+
}
2033
}
2134
}
2235

0 commit comments

Comments
 (0)