diff --git a/Common/Gmsh.cpp b/Common/Gmsh.cpp
index cec3d9828a79c878cad08c317750c0d1a38d0962..103dee45b653c1a10412cb35fede545ee392d9f9 100644
--- a/Common/Gmsh.cpp
+++ b/Common/Gmsh.cpp
@@ -240,19 +240,15 @@ int GmshFinalize()
 {
 #if defined(HAVE_POST)
   // Delete all PViewData stored in static list of PView class
-  for(unsigned int i = 0; i < PView::list.size(); i++) {
-    delete PView::list[i];
-  }
-  PView::list.clear();
+  while(PView::list.size()>0) delete PView::list[PView::list.size()-1];
   std::vector<PView*>().swap(PView::list);
 
   // Delete static _interpolationSchemes of PViewData class
   PViewData::removeAllInterpolationSchemes();
 #endif
+  
   // Delete all Gmodels
-  for(unsigned int i = 0; i < GModel::list.size(); i++)
-    delete GModel::list[i];
-  GModel::list.clear();
+  while(GModel::list.size()>0) delete GModel::list[GModel::list.size()-1];
   std::vector<GModel*>().swap(GModel::list);
 
   return 1;