diff options
author | over0219 <over0219@umn.edu> | 2020-06-12 18:03:18 +0300 |
---|---|---|
committer | over0219 <over0219@umn.edu> | 2020-06-12 18:03:18 +0300 |
commit | 4ff3bb13e35fb190c8510bf4daa7ded0a0c3b777 (patch) | |
tree | 137a294b91069991d5ea8c1b1f544b515a0066e1 | |
parent | a6c7484d1b898e5535e4a4a8a852420498b2f74d (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.cpp | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh_remesh_voxel.c | 37 | ||||
-rw-r--r-- | source/blender/editors/object/object_remesh.c | 2 |
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) { |