Memory Leak Fixes in NNTrainer
authorDonghyeon Jeong <dhyeon.jeong@samsung.com>
Thu, 6 Feb 2025 10:14:59 +0000 (19:14 +0900)
committerjijoong.moon <jijoong.moon@samsung.com>
Fri, 7 Feb 2025 02:14:02 +0000 (11:14 +0900)
This PR addresses memory leak issues in the NNTrainer.

**Changes proposed in this PR:**
- Release MemoryData pointer in the Tensor constructor using the vector.

**Self-evaluation:**
1. Build test: [X]Passed [ ]Failed [ ]Skipped
2. Run test:   [X]Passed [ ]Failed [ ]Skipped

Change-Id: Ia59d891439f1507a16b3fc252731c25993cf7b26
Signed-off-by: Donghyeon Jeong <dhyeon.jeong@samsung.com>
nntrainer/tensor/char_tensor.cpp
nntrainer/tensor/float_tensor.h
nntrainer/tensor/half_tensor.h
nntrainer/tensor/short_tensor.cpp

index ec70943b84ef6dd6d6615c1ac03a968affcdf36f..3b6c12872edb348811fad1222e43443c49165e88 100644 (file)
@@ -64,6 +64,7 @@ CharTensor::CharTensor(
     new MemoryData((void *)(new int8_t[dim.getDataLen()]()));
   data = std::shared_ptr<MemoryData>(mem_data, [](MemoryData *mem_data) {
     delete[] mem_data->getAddr<int8_t>();
+    delete mem_data;
   });
 
   offset = 0;
index 2818f18cee702bc272e54f717045dfcbca53810c..f1af39ca713332a0c43fcdb5057445dd7713fb7d 100644 (file)
@@ -88,6 +88,7 @@ public:
       new MemoryData((void *)(new float[dim.getDataLen()]()));
     data = std::shared_ptr<MemoryData>(mem_data, [](MemoryData *mem_data) {
       delete[] mem_data->getAddr<float>();
+      delete mem_data;
     });
 
     offset = 0;
index 7849d04d19fb9fdd3f50990fc7664f746eb24113..c5fcb834f82d32e61e6c0b0504715ea427a4bf4f 100644 (file)
@@ -87,6 +87,7 @@ public:
       new MemoryData((void *)(new _FP16[dim.getDataLen()]()));
     data = std::shared_ptr<MemoryData>(mem_data, [](MemoryData *mem_data) {
       delete[] mem_data->getAddr<_FP16>();
+      delete mem_data;
     });
 
     offset = 0;
index 0e9be0d723a117418bd3429c5907dd1539a9021c..ef8e4e5505e3ed9d3ffded0bb67364826a121cb6 100644 (file)
@@ -63,7 +63,8 @@ ShortTensor::ShortTensor(
   MemoryData *mem_data =
     new MemoryData((void *)(new uint16_t[dim.getDataLen()]()));
   data = std::shared_ptr<MemoryData>(mem_data, [](MemoryData *mem_data) {
-    delete[] mem_data->getAddr<uint16_t>();
+    delete[] mem_data->getAddr<int16_t>();
+    delete mem_data;
   });
 
   offset = 0;