diff --git a/Mesh/Levy3D.cpp b/Mesh/Levy3D.cpp
index 310e51d1a0f65762be2c71698dfae0faf5afe142..20fbc6e23038eec973e36045ca41a6180f65482f 100755
--- a/Mesh/Levy3D.cpp
+++ b/Mesh/Levy3D.cpp
@@ -1580,8 +1580,8 @@ void LpSmoother::improve_region(GRegion* gr)
   epsx = 0;
   maxits = max_iter;
 
-  double initial_conditions[3*(bank.size()-offset)];
-  double scales[3*(bank.size()-offset)];
+  double* initial_conditions = static_cast<double*>(malloc(3*(bank.size()-offset)*sizeof(double)));
+  double* scales = static_cast<double*>(malloc(3*(bank.size()-offset)*sizeof(double)));
   LpCVT instance;
   factor = 0.9;
   for(i=0;i<(bank.size()-offset);i++){
@@ -1626,6 +1626,8 @@ void LpSmoother::improve_region(GRegion* gr)
   for(i=0;i<interior_vertices.size();i++) delete interior_vertices[i];
   interior_vertices.clear();
   delete octree;
+  free(initial_conditions);
+  free(scales);
 #endif
 }