[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38737] branches/soc-2011-avocado/blender/ intern/autoseam/AutoseamAdjacency.cpp: Arpack crashes for erroneous dynamic memory allocation is fixed.

shuvro sarker shuvro05 at gmail.com
Tue Jul 26 18:37:39 CEST 2011


Revision: 38737
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38737
Author:   shuvro
Date:     2011-07-26 16:37:38 +0000 (Tue, 26 Jul 2011)
Log Message:
-----------
Arpack crashes for erroneous dynamic memory allocation is fixed.

Modified Paths:
--------------
    branches/soc-2011-avocado/blender/intern/autoseam/AutoseamAdjacency.cpp

Modified: branches/soc-2011-avocado/blender/intern/autoseam/AutoseamAdjacency.cpp
===================================================================
--- branches/soc-2011-avocado/blender/intern/autoseam/AutoseamAdjacency.cpp	2011-07-26 16:17:00 UTC (rev 38736)
+++ branches/soc-2011-avocado/blender/intern/autoseam/AutoseamAdjacency.cpp	2011-07-26 16:37:38 UTC (rev 38737)
@@ -30,8 +30,8 @@
 #include <fstream>
 #include "BKE_report.h"
 #include "AutoseamAdjacency.h"
+#include "MEM_guardedalloc.h"
 
-#define EIGEN_DEBUG_ARPACK 1
 
 #ifdef WITH_ARPACK
 #include "dssimp.h"
@@ -241,14 +241,20 @@
             return NULL;
         }
     
-        //dynamic memory allocation block
-        d__ = new doublereal[matrix_dimension];
-        resid = new doublereal[matrix_dimension];
-        workd = new doublereal[3*matrix_dimension];
-        vectors_size = matrix_dimension * nev;
-        v = new doublereal[vectors_size];
-        select = new logical[nev];
-        workl  = new  doublereal[ncv*ncv + 8*ncv];/* LWORKL must be at least NCV**2 + 8*NCV . */
+            
+        //vectors_size = matrix_dimension * nev;
+        vectors_size = ldv * ncv;
+        v            = (doublereal*)MEM_callocN(vectors_size * sizeof(doublereal), "eigen_vectors");
+        workl        = (doublereal*)MEM_callocN((ncv*ncv + 8*ncv) * sizeof(doublereal), "workl");
+        //d__          = (doublereal*)MEM_callocN(2*matrix_dimension * sizeof(doublereal), "eigen_values");
+        d__          = (doublereal*)MEM_callocN(2*ncv * sizeof(doublereal), "eigen_values");
+    
+        resid        = (doublereal*)MEM_callocN(matrix_dimension * sizeof(doublereal), "resid");
+        workd        = (doublereal*)MEM_callocN(3 * matrix_dimension * sizeof(doublereal), "workd");
+        
+        select       = (logical*)MEM_callocN(ncv * sizeof(logical), "select");
+        
+        
 
 
         lworkl = ncv * (ncv + 8);
@@ -257,7 +263,7 @@
         ido = 0;
     
         ishfts = 1;
-        maxitr = 300;
+        maxitr = 350;
         mode1 = 1;
     
         iparam[0] = ishfts;
@@ -353,12 +359,14 @@
                 for(i = 0; i < nev; i++) eigen_values(i) = d__[i];
                 
                 //memory deallocation
-                if(d__    != NULL)    delete [] d__;
-                if(resid  != NULL)    delete [] resid;
-                if(workd  != NULL)    delete [] workd;
-                if(workl  != NULL)    delete [] workl;
-                if(select != NULL)    delete [] select;
+                
+                MEM_freeN(d__);
+                MEM_freeN(resid);
+                MEM_freeN(workd);
+                MEM_freeN(workl);
+                MEM_freeN(select);
 
+
                 
                 // return the eigen vectors
                 return v;
@@ -369,11 +377,13 @@
         
         }
     
-    if(d__    != NULL)    delete [] d__;
-    if(resid  != NULL)    delete [] resid;
-    if(workd  != NULL)    delete [] workd;
-    if(workl  != NULL)    delete [] workl;
-    if(select != NULL)    delete [] select;
+    
+    MEM_freeN(d__);
+    MEM_freeN(resid);
+    MEM_freeN(workd);
+    MEM_freeN(workl);
+    MEM_freeN(select);
+    
     *v = NULL;
     
     return v;
@@ -453,10 +463,11 @@
 			f++;
 		}
         
-        //if(eigen_vectors != NULL) delete [] eigen_vectors;
+        MEM_freeN(eigen_vectors);
 		return found;
 	}
-    //if(eigen_vectors != NULL) delete [] eigen_vectors;
+    
+    MEM_freeN(eigen_vectors);
 	return 0;
 }
 




More information about the Bf-blender-cvs mailing list