[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