Skip to content
Snippets Groups Projects
Commit bdeebb63 authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

fix memory leaks

parent b5fe4298
Branches
Tags
No related merge requests found
// $Id: CAD.cpp,v 1.40 2001-11-12 14:18:17 geuzaine Exp $ // $Id: CAD.cpp,v 1.41 2001-11-12 15:29:39 geuzaine Exp $
#include "Gmsh.h" #include "Gmsh.h"
#include "Numeric.h" #include "Numeric.h"
...@@ -1305,8 +1305,8 @@ void ReplaceDuplicatePoints(Mesh *m){ ...@@ -1305,8 +1305,8 @@ void ReplaceDuplicatePoints(Mesh *m){
/* Create unique points */ /* Create unique points */
start = Tree_Nbr(m->Points); start = Tree_Nbr(m->Points);
All = Tree2List(m->Points);
All = Tree2List(m->Points);
allNonDulpicatedPoints = Tree_Create(sizeof(Vertex*),comparePosition); allNonDulpicatedPoints = Tree_Create(sizeof(Vertex*),comparePosition);
for(i=0;i<List_Nbr(All);i++){ for(i=0;i<List_Nbr(All);i++){
List_Read(All,i,&v); List_Read(All,i,&v);
...@@ -1319,11 +1319,18 @@ void ReplaceDuplicatePoints(Mesh *m){ ...@@ -1319,11 +1319,18 @@ void ReplaceDuplicatePoints(Mesh *m){
//List_Add(points2delete,&v); //List_Add(points2delete,&v);
} }
} }
List_Delete(All); List_Delete(All);
end = Tree_Nbr(m->Points); end = Tree_Nbr(m->Points);
if(start-end) Msg(DEBUG, "Removed %d duplicate points", start-end);
if(start == end){
Tree_Delete(allNonDulpicatedPoints);
List_Delete(points2delete);
return;
}
Msg(DEBUG, "Removed %d duplicate points", start-end);
if(CTX.geom.old_newreg){ if(CTX.geom.old_newreg){
m->MaxPointNum=0; m->MaxPointNum=0;
Tree_Action(m->Points,MaxNumPoint); Tree_Action(m->Points,MaxNumPoint);
...@@ -1333,7 +1340,6 @@ void ReplaceDuplicatePoints(Mesh *m){ ...@@ -1333,7 +1340,6 @@ void ReplaceDuplicatePoints(Mesh *m){
/* Replace old points in curves */ /* Replace old points in curves */
All = Tree2List(m->Curves); All = Tree2List(m->Curves);
for(i=0;i<List_Nbr(All);i++){ for(i=0;i<List_Nbr(All);i++){
List_Read(All,i,&c); List_Read(All,i,&c);
Tree_Query(allNonDulpicatedPoints,&c->beg); Tree_Query(allNonDulpicatedPoints,&c->beg);
...@@ -1357,7 +1363,6 @@ void ReplaceDuplicatePoints(Mesh *m){ ...@@ -1357,7 +1363,6 @@ void ReplaceDuplicatePoints(Mesh *m){
List_Pointer(s->Control_Points,j))); List_Pointer(s->Control_Points,j)));
} }
} }
List_Delete(All); List_Delete(All);
for(int k = 0; k < List_Nbr(points2delete);k++){ for(int k = 0; k < List_Nbr(points2delete);k++){
...@@ -1365,6 +1370,9 @@ void ReplaceDuplicatePoints(Mesh *m){ ...@@ -1365,6 +1370,9 @@ void ReplaceDuplicatePoints(Mesh *m){
Free_Vertex(&v,0); Free_Vertex(&v,0);
} }
Tree_Delete(allNonDulpicatedPoints);
List_Delete(points2delete);
} }
void ReplaceDuplicateCurves(Mesh *m){ void ReplaceDuplicateCurves(Mesh *m){
...@@ -1377,8 +1385,8 @@ void ReplaceDuplicateCurves(Mesh *m){ ...@@ -1377,8 +1385,8 @@ void ReplaceDuplicateCurves(Mesh *m){
/* Create unique curves */ /* Create unique curves */
start = Tree_Nbr(m->Curves); start = Tree_Nbr(m->Curves);
All = Tree2List(m->Curves);
All = Tree2List(m->Curves);
allNonDulpicatedCurves = Tree_Create(sizeof(Curve*),compareTwoCurves); allNonDulpicatedCurves = Tree_Create(sizeof(Curve*),compareTwoCurves);
for(i=0;i<List_Nbr(All);i++){ for(i=0;i<List_Nbr(All);i++){
List_Read(All,i,&c); List_Read(All,i,&c);
...@@ -1403,12 +1411,17 @@ void ReplaceDuplicateCurves(Mesh *m){ ...@@ -1403,12 +1411,17 @@ void ReplaceDuplicateCurves(Mesh *m){
} }
} }
} }
List_Delete(All); List_Delete(All);
end = Tree_Nbr(m->Curves); end = Tree_Nbr(m->Curves);
if(start-end) Msg(DEBUG, "Removed %d duplicate curves", start-end); if(start == end){
Tree_Delete(allNonDulpicatedCurves);
return;
}
Msg(DEBUG, "Removed %d duplicate curves", start-end);
if(CTX.geom.old_newreg){ if(CTX.geom.old_newreg){
m->MaxLineNum=0; m->MaxLineNum=0;
Tree_Action(m->Curves,MaxNumCurve); Tree_Action(m->Curves,MaxNumCurve);
...@@ -1427,7 +1440,9 @@ void ReplaceDuplicateCurves(Mesh *m){ ...@@ -1427,7 +1440,9 @@ void ReplaceDuplicateCurves(Mesh *m){
End_Curve(*(Curve**)List_Pointer(s->Generatrices,j)); End_Curve(*(Curve**)List_Pointer(s->Generatrices,j));
} }
} }
List_Delete(All);
Tree_Delete(allNonDulpicatedCurves);
} }
void ReplaceDuplicateSurfaces(Mesh *m){ void ReplaceDuplicateSurfaces(Mesh *m){
...@@ -1440,8 +1455,8 @@ void ReplaceDuplicateSurfaces(Mesh *m){ ...@@ -1440,8 +1455,8 @@ void ReplaceDuplicateSurfaces(Mesh *m){
/* Create unique surfaces */ /* Create unique surfaces */
start = Tree_Nbr(m->Surfaces); start = Tree_Nbr(m->Surfaces);
All = Tree2List(m->Surfaces);
All = Tree2List(m->Surfaces);
allNonDulpicatedSurfaces = Tree_Create(sizeof(Curve*),compareTwoSurfaces); allNonDulpicatedSurfaces = Tree_Create(sizeof(Curve*),compareTwoSurfaces);
for(i=0;i<List_Nbr(All);i++){ for(i=0;i<List_Nbr(All);i++){
List_Read(All,i,&s); List_Read(All,i,&s);
...@@ -1454,12 +1469,17 @@ void ReplaceDuplicateSurfaces(Mesh *m){ ...@@ -1454,12 +1469,17 @@ void ReplaceDuplicateSurfaces(Mesh *m){
} }
} }
} }
List_Delete(All); List_Delete(All);
end = Tree_Nbr(m->Surfaces); end = Tree_Nbr(m->Surfaces);
if(start-end) Msg(DEBUG, "Removed %d duplicate surfaces", start-end); if(start == end){
Tree_Delete(allNonDulpicatedSurfaces);
return;
}
Msg(DEBUG, "Removed %d duplicate surfaces", start-end);
if(CTX.geom.old_newreg){ if(CTX.geom.old_newreg){
m->MaxSurfaceNum=0; m->MaxSurfaceNum=0;
Tree_Action(m->Surfaces,MaxNumSurface); Tree_Action(m->Surfaces,MaxNumSurface);
...@@ -1476,7 +1496,9 @@ void ReplaceDuplicateSurfaces(Mesh *m){ ...@@ -1476,7 +1496,9 @@ void ReplaceDuplicateSurfaces(Mesh *m){
List_Pointer(vol->Surfaces,j))); List_Pointer(vol->Surfaces,j)));
} }
} }
List_Delete(All);
Tree_Delete(allNonDulpicatedSurfaces);
} }
void ReplaceAllDuplicates(Mesh *m){ void ReplaceAllDuplicates(Mesh *m){
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment