From db1b15cbb6b74cf18e45a81902086ebecc100f80 Mon Sep 17 00:00:00 2001 From: Dan M Date: Wed, 17 Aug 2016 21:21:42 -0400 Subject: [PATCH] updated v_array::erase() and delete_v to properly destroy contained elements; removed redundant invocations of same in feature_group.h --- AUTHORS | 1 + vowpalwabbit/feature_group.h | 3 --- vowpalwabbit/v_array.h | 15 ++++++++++----- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/AUTHORS b/AUTHORS index dee721ef9ac..2c5f054fe0a 100644 --- a/AUTHORS +++ b/AUTHORS @@ -15,6 +15,7 @@ John Langford Bharath Krishnan Brian Muller Chris Quirk + Dan Melamed Daniel Erenrich Daniel Hsu Doug Shore diff --git a/vowpalwabbit/feature_group.h b/vowpalwabbit/feature_group.h index 3aaecc85782..8f418a4c19d 100644 --- a/vowpalwabbit/feature_group.h +++ b/vowpalwabbit/feature_group.h @@ -256,7 +256,6 @@ struct features { sum_feat_sq = 0.f; values.erase(); indicies.erase(); - free_space_names(0); space_names.erase(); } @@ -288,7 +287,6 @@ struct features { { values.delete_v(); indicies.delete_v(); - free_space_names(0); space_names.delete_v(); } void push_back(feature_value v, feature_index i) @@ -325,7 +323,6 @@ struct features { void deep_copy_from(const features& src) { copy_array(values, src.values); copy_array(indicies, src.indicies); - free_space_names(0); copy_array_no_memcpy(space_names, src.space_names); sum_feat_sq = src.sum_feat_sq; } diff --git a/vowpalwabbit/v_array.h b/vowpalwabbit/v_array.h index 18034df30d3..70782ceb573 100644 --- a/vowpalwabbit/v_array.h +++ b/vowpalwabbit/v_array.h @@ -74,14 +74,19 @@ template struct v_array void erase() { if (++erase_count & erase_point) - { resize(_end-_begin); - erase_count = 0; - } + { resize(_end-_begin); + erase_count = 0; + } + for (T*item = _begin; item != _end; ++item) + item->~T(); _end = _begin; } void delete_v() - { if (_begin != nullptr) - free(_begin); + { if (_begin != nullptr) { + for (T*item = _begin; item != _end; ++item) + item->~T(); + free(_begin); + } _begin = _end = end_array = nullptr; } void push_back(const T& new_ele)