Fix some memory leaks in HierarchicalClusteringIndex
This commit is contained in:
parent
459e7d4a80
commit
92fc763925
@ -298,6 +298,11 @@ public:
|
|||||||
trees_ = get_param(params,"trees",4);
|
trees_ = get_param(params,"trees",4);
|
||||||
root = new NodePtr[trees_];
|
root = new NodePtr[trees_];
|
||||||
indices = new int*[trees_];
|
indices = new int*[trees_];
|
||||||
|
|
||||||
|
for (int i=0; i<trees_; ++i) {
|
||||||
|
root[i] = NULL;
|
||||||
|
indices[i] = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HierarchicalClusteringIndex(const HierarchicalClusteringIndex&);
|
HierarchicalClusteringIndex(const HierarchicalClusteringIndex&);
|
||||||
@ -310,11 +315,34 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual ~HierarchicalClusteringIndex()
|
virtual ~HierarchicalClusteringIndex()
|
||||||
{
|
{
|
||||||
|
free_elements();
|
||||||
|
|
||||||
|
if (root!=NULL) {
|
||||||
|
delete[] root;
|
||||||
|
}
|
||||||
|
|
||||||
if (indices!=NULL) {
|
if (indices!=NULL) {
|
||||||
delete[] indices;
|
delete[] indices;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Release the inner elements of indices[]
|
||||||
|
*/
|
||||||
|
void free_elements()
|
||||||
|
{
|
||||||
|
if (indices!=NULL) {
|
||||||
|
for(int i=0; i<trees_; ++i) {
|
||||||
|
if (indices[i]!=NULL) {
|
||||||
|
delete[] indices[i];
|
||||||
|
indices[i] = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns size of index.
|
* Returns size of index.
|
||||||
*/
|
*/
|
||||||
@ -349,6 +377,9 @@ public:
|
|||||||
if (branching_<2) {
|
if (branching_<2) {
|
||||||
throw FLANNException("Branching factor must be at least 2");
|
throw FLANNException("Branching factor must be at least 2");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free_elements();
|
||||||
|
|
||||||
for (int i=0; i<trees_; ++i) {
|
for (int i=0; i<trees_; ++i) {
|
||||||
indices[i] = new int[size_];
|
indices[i] = new int[size_];
|
||||||
for (size_t j=0; j<size_; ++j) {
|
for (size_t j=0; j<size_; ++j) {
|
||||||
@ -388,6 +419,17 @@ public:
|
|||||||
load_value(stream, centers_init_);
|
load_value(stream, centers_init_);
|
||||||
load_value(stream, leaf_size_);
|
load_value(stream, leaf_size_);
|
||||||
load_value(stream, memoryCounter);
|
load_value(stream, memoryCounter);
|
||||||
|
|
||||||
|
free_elements();
|
||||||
|
|
||||||
|
if (root!=NULL) {
|
||||||
|
delete[] root;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (indices!=NULL) {
|
||||||
|
delete[] indices;
|
||||||
|
}
|
||||||
|
|
||||||
indices = new int*[trees_];
|
indices = new int*[trees_];
|
||||||
root = new NodePtr[trees_];
|
root = new NodePtr[trees_];
|
||||||
for (int i=0; i<trees_; ++i) {
|
for (int i=0; i<trees_; ++i) {
|
||||||
|
Loading…
Reference in New Issue
Block a user