diff --git a/IO/Image/vtkPNGWriter.cxx b/IO/Image/vtkPNGWriter.cxx
index 1ee217d7ef19567ad273ba8e5d38956ea8618caf..27df7f197294416b54a68bd4df5a1a796d60cd46 100644
--- a/IO/Image/vtkPNGWriter.cxx
+++ b/IO/Image/vtkPNGWriter.cxx
@@ -220,6 +220,7 @@ void vtkPNGWriter::WriteSlice(vtkImageData *data, int* uExtent)
 
 
   this->TempFP = 0;
+  png_byte **row_pointers;
   if (this->WriteToMemory)
     {
     vtkUnsignedCharArray *uc = this->GetResult();
@@ -249,6 +250,9 @@ void vtkPNGWriter::WriteSlice(vtkImageData *data, int* uExtent)
       if (setjmp(png_jmpbuf((png_ptr))))
         {
         fclose(this->TempFP);
+        if (row_pointers)
+           delete [] row_pointers;
+        png_destroy_write_struct(&png_ptr, &info_ptr);
         this->SetErrorCode(vtkErrorCode::OutOfDiskSpaceError);
         return;
         }
@@ -293,7 +297,7 @@ void vtkPNGWriter::WriteSlice(vtkImageData *data, int* uExtent)
     png_set_swap(png_ptr);
 #endif
     }
-  png_byte **row_pointers = new png_byte *[height];
+  row_pointers = new png_byte *[height];
   vtkIdType *outInc = data->GetIncrements();
   vtkIdType rowInc = outInc[1]*bit_depth/8;
   for (ui = 0; ui < height; ui++)