diff --git a/contrib/HighOrderMeshOptimizer/CADDistances.cpp b/contrib/HighOrderMeshOptimizer/CADDistances.cpp
index bf4b1066057456375e698c73e579e34c3e193697..96b517c97d291f2a5a55bd4ce434f5a29f3507e2 100644
--- a/contrib/HighOrderMeshOptimizer/CADDistances.cpp
+++ b/contrib/HighOrderMeshOptimizer/CADDistances.cpp
@@ -116,7 +116,7 @@ parametricLineNodalBasis::parametricLineNodalBasis(const nodalBasis &basis,
 
 SPoint3 parametricLineNodalBasis::operator()(double xi) const
 {
-  double psi[_xyz.size()];
+  double *psi = new double[_xyz.size()];
   SPoint3 p(0., 0., 0.);
   _basis.f(-1 + 2 * xi, 0., 0., psi);
   for (size_t j = 0; j < _xyz.size(); ++j) {
@@ -124,13 +124,14 @@ SPoint3 parametricLineNodalBasis::operator()(double xi) const
     p[1] += psi[j] * _xyz[j].y();
     p[2] += psi[j] * _xyz[j].z();
   }
+  delete[] psi;
   return p;
 }
 
 
 SVector3 parametricLineNodalBasis::derivative(double xi) const
 {
-  double dpsi[_xyz.size()][3];
+  double (*dpsi)[3] = new double[_xyz.size()][3];
   SVector3 p(0., 0., 0.);
   _basis.df(-1 + 2 * xi, 0., 0., dpsi);
   for (size_t j = 0; j < _xyz.size(); ++j) {
@@ -138,13 +139,14 @@ SVector3 parametricLineNodalBasis::derivative(double xi) const
     p[1] += dpsi[j][0] * _xyz[j].y();
     p[2] += dpsi[j][0] * _xyz[j].z();
   }
+  delete[] dpsi;
   return p;
 }
 
 
 SVector3 parametricLineNodalBasis::secondDerivative(double xi) const
 {
-  double ddpsi[_xyz.size()][3][3];
+  double (*ddpsi)[3][3] = new double[_xyz.size()][3][3];
   SVector3 p(0, 0, 0);
   _basis.ddf(-1 + 2 * xi, 0, 0, ddpsi);
   for (size_t j = 0; j < _xyz.size(); ++j) {
@@ -152,6 +154,7 @@ SVector3 parametricLineNodalBasis::secondDerivative(double xi) const
     p[1] += ddpsi[j][0][0] * _xyz[j].y();
     p[2] += ddpsi[j][0][0] * _xyz[j].z();
   }
+  delete[] ddpsi;
   return p;
 }