Skip to content

Commit fb645bb

Browse files
committed
fix memory leak in regions cpu backend
1 parent de9ba33 commit fb645bb

1 file changed

Lines changed: 8 additions & 8 deletions

File tree

‎src/backend/cpu/kernel/regions.hpp‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
#pragma once
1111
#include <Array.hpp>
12+
#include <memory.hpp>
1213

1314
namespace cpu
1415
{
@@ -103,7 +104,8 @@ void regions(Array<T> out, const Array<char> in, af_connectivity connectivity)
103104
T *out_ptr = out.get();
104105

105106
// Map labels
106-
typedef typename std::map<T, LabelNode<T>* > label_map_t;
107+
typedef typename std::unique_ptr< LabelNode<T> > UnqLabelPtr;
108+
typedef typename std::map<T, UnqLabelPtr > label_map_t;
107109
typedef typename label_map_t::iterator label_map_iterator_t;
108110

109111
label_map_t lmap;
@@ -134,18 +136,16 @@ void regions(Array<T> out, const Array<char> in, af_connectivity connectivity)
134136
for (size_t k = 0; k < l.size(); k++) {
135137
minl = min(l[k], minl);
136138
label_map_iterator_t cur_map = lmap.find(l[k]);
137-
LabelNode<T> *node = cur_map->second;
139+
LabelNode<T> *node = cur_map->second.get();
138140
// Group labels of the same region under a disjoint set
139141
for (size_t m = k+1; m < l.size(); m++)
140-
setUnion(node, lmap.find(l[m])->second);
142+
setUnion(node, lmap.find(l[m])->second.get());
141143
}
142144
// Set label to smallest neighbor label
143145
out_ptr[idx] = minl;
144-
}
145-
else {
146+
} else {
146147
// Insert new label in map
147-
LabelNode<T> *node = new LabelNode<T>(label);
148-
lmap.insert(std::pair<T, LabelNode<T>* >(label, node));
148+
lmap.insert(std::pair<T, UnqLabelPtr>(label, UnqLabelPtr(new LabelNode<T>(label))));
149149
out_ptr[idx] = label++;
150150
}
151151
}
@@ -162,7 +162,7 @@ void regions(Array<T> out, const Array<char> in, af_connectivity connectivity)
162162
label_map_iterator_t cur_map = lmap.find(l);
163163

164164
if (cur_map != lmap.end()) {
165-
LabelNode<T>* node = cur_map->second;
165+
LabelNode<T>* node = cur_map->second.get();
166166

167167
LabelNode<T>* node_root = find(node);
168168
out_ptr[idx] = node_root->getMinLabel();

0 commit comments

Comments
 (0)