Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorover0219 <over0219@umn.edu>2020-06-12 18:03:18 +0300
committerover0219 <over0219@umn.edu>2020-06-12 18:03:18 +0300
commit4ff3bb13e35fb190c8510bf4daa7ded0a0c3b777 (patch)
tree137a294b91069991d5ea8c1b1f544b515a0066e1
parenta6c7484d1b898e5535e4a4a8a852420498b2f74d (diff)
reported mem leak in tetgen remesher but was just an malloc/free API call mistake, not a memleak. fixed.
-rw-r--r--intern/tetgen/tetgen_api.cpp4
-rw-r--r--source/blender/blenkernel/intern/mesh_remesh_voxel.c37
-rw-r--r--source/blender/editors/object/object_remesh.c2
3 files changed, 21 insertions, 22 deletions
diff --git a/intern/tetgen/tetgen_api.cpp b/intern/tetgen/tetgen_api.cpp
index 16d403975a0..50b8201caac 100644
--- a/intern/tetgen/tetgen_api.cpp
+++ b/intern/tetgen/tetgen_api.cpp
@@ -110,15 +110,13 @@ bool tetgen_resmesh(TetGenRemeshData *tg)
// if (quality>0)
// switches << "q" << quality;
- char *c_switches = new char[switches.str().length()+1];
- std::strcpy(c_switches,switches.str().c_str());
tetgenio in;
make_tetgenio(tg->in_verts, tg->in_faces, tg->in_totverts, tg->in_totfaces, in);
tetgenio out;
out.initialize();
+ char *c_switches = (char *)switches.str().c_str();
tetrahedralize(c_switches, &in, &out);
- delete c_switches; // done with switches
if( out.numberoftetrahedra == 0 || out.numberofpoints == 0 )
{
diff --git a/source/blender/blenkernel/intern/mesh_remesh_voxel.c b/source/blender/blenkernel/intern/mesh_remesh_voxel.c
index 018c13b65a7..00bcf9eb8a9 100644
--- a/source/blender/blenkernel/intern/mesh_remesh_voxel.c
+++ b/source/blender/blenkernel/intern/mesh_remesh_voxel.c
@@ -309,21 +309,13 @@ static Mesh *BKE_mesh_remesh_tetgen(Mesh *input_mesh,
bool success = tetgen_resmesh(&tg);
MEM_freeN(verts);
+ verts = NULL;
+ tg.in_verts = NULL;
MEM_freeN(faces);
+ faces = NULL;
+ tg.in_faces = NULL;
MEM_freeN(verttri);
-
-{
- if (tg.out_verts)
- MEM_freeN(tg.out_verts);
-
- if (tg.out_facets)
- MEM_freeN(tg.out_facets);
-
- if (tg.out_tets)
- MEM_freeN(tg.out_tets);
-
- return NULL;
-}
+ verttri = NULL;
Mesh *mesh = NULL;
if (success)
@@ -349,20 +341,29 @@ static Mesh *BKE_mesh_remesh_tetgen(Mesh *input_mesh,
BKE_mesh_calc_normals(mesh);
*numtets = tg.out_tottets;
- //*tets = (unsigned int *)MEM_malloc_arrayN(tg.out_tottets*4, sizeof(unsigned int), "remesh_output_tets");
- *tets = (unsigned int *)malloc(tg.out_tottets*4*sizeof(unsigned int));
+ *tets = (unsigned int *)MEM_malloc_arrayN(tg.out_tottets*4, sizeof(unsigned int), "remesh_output_tets");
+ //*tets = (unsigned int *)malloc(tg.out_tottets*4*sizeof(unsigned int));
memcpy(*tets,tg.out_tets,tg.out_tottets*4*sizeof(unsigned int));
} // end success
- if (tg.out_verts)
+ if (tg.out_verts != NULL)
+ {
MEM_freeN(tg.out_verts);
+ tg.out_verts = NULL;
+ }
- if (tg.out_facets)
+ if (tg.out_facets != NULL)
+ {
MEM_freeN(tg.out_facets);
+ tg.out_facets = NULL;
+ }
- if (tg.out_tets)
+ if (tg.out_tets != NULL)
+ {
MEM_freeN(tg.out_tets);
+ tg.out_tets = NULL;
+ }
return mesh;
}
diff --git a/source/blender/editors/object/object_remesh.c b/source/blender/editors/object/object_remesh.c
index 1b0d373633c..d827f9eeac3 100644
--- a/source/blender/editors/object/object_remesh.c
+++ b/source/blender/editors/object/object_remesh.c
@@ -1188,7 +1188,7 @@ static int tetgen_remesh_exec(bContext *C, wmOperator *op)
Mesh *mesh = ob->data;
Mesh *new_mesh = NULL;
- unsigned int *tets;
+ unsigned int *tets = NULL;
int numtets;
new_mesh = BKE_mesh_remesh_tetgen_to_mesh_nomain(mesh,&tets,&numtets);
if (tets) {