diff --git a/Modules/IO/IOGDAL/src/otbDEMHandler.cxx b/Modules/IO/IOGDAL/src/otbDEMHandler.cxx
index d91621e2263bf00ba7e3df56a6e7b6acc66d30c8..991e454668e10c12cf54bddbef9176dbeb1e900a 100644
--- a/Modules/IO/IOGDAL/src/otbDEMHandler.cxx
+++ b/Modules/IO/IOGDAL/src/otbDEMHandler.cxx
@@ -138,7 +138,11 @@ DEMHandler::DEMHandler() : m_Dataset(nullptr),
 
 DEMHandler::~DEMHandler()
 {
-  GDALClose(m_GeoidDS);
+  if (m_GeoidDS)
+  {
+    GDALClose(m_GeoidDS);
+  }
+
   ClearDEMs();
 }
 
@@ -180,16 +184,15 @@ void DEMHandler::OpenDEMDirectory(const std::string& DEMDirectory)
     }
     else
     {
-      auto vrtDatasetList = new GDALDatasetH[vrtSize];
+      std::vector<GDALDatasetH> vrtDatasetList(vrtSize);
       for (int i = 0; i < vrtSize; i++)
       {
         vrtDatasetList[i] = m_DatasetList[i]->GetDataSet();
       }
 
-      m_Dataset = (GDALDataset *) GDALBuildVRT(nullptr, vrtSize, vrtDatasetList, 
-                                                nullptr, nullptr, nullptr);
+      m_Dataset = static_cast<GDALDataset *> (GDALBuildVRT(nullptr, vrtSize, vrtDatasetList.data(), 
+                                                nullptr, nullptr, nullptr));
       m_DEMDirectories.push_back(DEMDirectory);
-      delete[] vrtDatasetList;
     }
     
   }