diff options
-rw-r--r-- | source/blender/blenlib/BLI_generic_array.hh | 4 | ||||
-rw-r--r-- | source/blender/blenlib/tests/BLI_generic_array_test.cc | 9 |
2 files changed, 12 insertions, 1 deletions
diff --git a/source/blender/blenlib/BLI_generic_array.hh b/source/blender/blenlib/BLI_generic_array.hh index f0eddd30419..03dc8814309 100644 --- a/source/blender/blenlib/BLI_generic_array.hh +++ b/source/blender/blenlib/BLI_generic_array.hh @@ -231,7 +231,9 @@ class GArray { this->deallocate(new_data); throw; } - this->deallocate(data_); + if (this->data_) { + this->deallocate(data_); + } data_ = new_data; } diff --git a/source/blender/blenlib/tests/BLI_generic_array_test.cc b/source/blender/blenlib/tests/BLI_generic_array_test.cc index 25e08f59f94..8e32430eede 100644 --- a/source/blender/blenlib/tests/BLI_generic_array_test.cc +++ b/source/blender/blenlib/tests/BLI_generic_array_test.cc @@ -114,4 +114,13 @@ TEST(generic_array, InContainer) } } +TEST(generic_array, ReinitEmpty) +{ + GArray<> array(CPPType::get<int>()); + array.reinitialize(10); + array.as_mutable_span().typed<int>()[9] = 7; + EXPECT_EQ(array.size(), 10); + EXPECT_EQ(array.as_span().typed<int>()[9], 7); +} + } // namespace blender::tests |