diff --git a/Geo/DataBase.cpp b/Geo/DataBase.cpp index 6f3d7f4a5fb3e252a16ea602bb342d372e64b9c3..b7a4a26e2917a91232d8bffb1849b9270eae560d 100644 --- a/Geo/DataBase.cpp +++ b/Geo/DataBase.cpp @@ -1,4 +1,4 @@ -// $Id: DataBase.cpp,v 1.13 2001-06-02 16:24:51 geuzaine Exp $ +// $Id: DataBase.cpp,v 1.14 2001-06-06 21:29:58 remacle Exp $ #include "Gmsh.h" #include "Const.h" @@ -328,6 +328,10 @@ void Cdbz101(int izon, int typzon,int o1, int o2, int nbu, int nbv, else{ Add_PhysicalGroup(izon,typzon,templist,THEM); } + + if(liste)List_Delete (templist); + + } void CreateNurbsSurfaceSupport (int Num , int Order1, int Order2 , diff --git a/Mesh/2D_Mesh.cpp b/Mesh/2D_Mesh.cpp index ae9b9de55a8ad05dfaa86c78864bf4c1b9038ba4..4c85908fe56acfc8e78fa21534a361c1a1f46490 100644 --- a/Mesh/2D_Mesh.cpp +++ b/Mesh/2D_Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: 2D_Mesh.cpp,v 1.26 2001-06-06 15:30:18 remacle Exp $ +// $Id: 2D_Mesh.cpp,v 1.27 2001-06-06 21:29:58 remacle Exp $ /* Maillage Delaunay d'une surface (Point insertion Technique) @@ -1102,7 +1102,8 @@ void Maillage_Surface (void *data, void *dum){ create_NXE (s->Vertices, s->Simplexes, tnxe); for (int i = 0; i < CTX.mesh.nb_smoothing; i++) Tree_Action (tnxe, ActionLiss); - Tree_Delete (tnxe); + // MEMORY LEAK (JF) + delete_NXE (tnxe); } diff --git a/Mesh/2D_Mesh.h b/Mesh/2D_Mesh.h index 66259a1997e6ffc6d9c21a4171b5d4dc4fad74f1..2657828585337be43e6d46ccdb855118af6dc3ba 100644 --- a/Mesh/2D_Mesh.h +++ b/Mesh/2D_Mesh.h @@ -66,6 +66,7 @@ int CircumCircle(double x1,double y1,double x2,double y2,double x3,double y3, double find_quality (MPoint center, DocRecord * BGMESH); void create_NXE (Tree_T * TreeAllNod, Tree_T * TreeAllElg, Tree_T * TreeAllNXE); +void delete_NXE (Tree_T * TreeAllNXE); int Is_left_of(PointNumero x,PointNumero y,PointNumero check); int Is_right_of(PointNumero x,PointNumero y,PointNumero check); diff --git a/Mesh/2D_Mesh_Aniso.cpp b/Mesh/2D_Mesh_Aniso.cpp index a4b551ce9aeb245d2d12796dbca4c255c8a3ded9..c7b732b7e067e74c1ee946dd2d23e4e86c7baaf2 100644 --- a/Mesh/2D_Mesh_Aniso.cpp +++ b/Mesh/2D_Mesh_Aniso.cpp @@ -1,4 +1,4 @@ -// $Id: 2D_Mesh_Aniso.cpp,v 1.16 2001-06-06 15:30:18 remacle Exp $ +// $Id: 2D_Mesh_Aniso.cpp,v 1.17 2001-06-06 21:29:58 remacle Exp $ /* Jean-Francois Remacle @@ -239,6 +239,9 @@ void Box_2_Triangles (List_T * P, Surface * s){ ps->S[j] = &MyNewBoundary; Tree_Replace (s->Simplexes, &ps); } + // MEMORY LEAK (JF) + List_Delete(smp); + } @@ -847,6 +850,11 @@ void Restore_Surface (Surface * s){ List_Reset (ListCurves); List_Reset (StackSimp); } + // MEMORY LEAK (JF) + List_Delete (StackSimp); + List_Delete (ListCurves); + List_Delete (ListAllCurves); + } void suppress_simplex_2D (void *data, void *dum){ @@ -1025,13 +1033,15 @@ int AlgorithmeMaillage2DAnisotropeModeJF (Surface * s){ Restore_Surface (s); + // MEMORY LEAK (JF) + Tree_Delete(FacesTree); + Suppress = List_Create (10, 10, sizeof (Simplex *)); Tree_Action (s->Simplexes, suppress_simplex_2D); for (i = 0; i < List_Nbr (Suppress); i++){ Tree_Suppress (s->Simplexes, List_Pointer (Suppress, i)); } - List_Delete (Suppress); - + if(!Tree_Right (s->Simplexes, &simp)) Msg(WARNING, "No simplex left"); else{ @@ -1094,7 +1104,10 @@ int AlgorithmeMaillage2DAnisotropeModeJF (Surface * s){ List_Read (List, i, &THEV); if (THEV->Num < 0){ Tree_Suppress (s->Vertices, &THEV); - //delete THEV; + // BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG + // MEMORY LEAK (JF) BUT THIS CAUSES PROBLEMS AFTER !! + // Free(THEV); + // BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG } } List_Delete (List); @@ -1109,5 +1122,15 @@ int AlgorithmeMaillage2DAnisotropeModeJF (Surface * s){ //IntelligentSwapEdges(s,THEM->Metric); List_Delete (Points); + + + // WAS A MEMORY LEAK + for (i = 0; i < List_Nbr (Suppress); i++){ + Free_Simplex(List_Pointer (Suppress, i),0); + } + List_Delete (Suppress); + + return 1; } + diff --git a/Mesh/2D_Recombine.cpp b/Mesh/2D_Recombine.cpp index 453c67e501b2df86c30ba2e2f0779f7a0ff50e5e..b7dee3ff79b20474f1859e2b056246ff70e405d2 100644 --- a/Mesh/2D_Recombine.cpp +++ b/Mesh/2D_Recombine.cpp @@ -1,4 +1,4 @@ -// $Id: 2D_Recombine.cpp,v 1.6 2001-06-03 11:19:52 geuzaine Exp $ +// $Id: 2D_Recombine.cpp,v 1.7 2001-06-06 21:29:58 remacle Exp $ #include "Gmsh.h" #include "Const.h" @@ -98,7 +98,8 @@ int Recombine (Tree_T *TreeAllVert, Tree_T *TreeAllElg, double a){ create_NXE(TreeAllVert,TreeAllElg,tnxe); for (int i = 0; i < CTX.mesh.nb_smoothing; i++) Tree_Action(tnxe,ActionLissSurf); - Tree_Delete(tnxe); + // MEMORY LEAK (JF) + delete_NXE(tnxe); } /* Destruction */ diff --git a/Mesh/3D_Extrude.cpp b/Mesh/3D_Extrude.cpp index 31309753a04a6d857f10e608a481d2272a418bef..e262b723d23b3e331ff680688c1bfed89395ba83 100644 --- a/Mesh/3D_Extrude.cpp +++ b/Mesh/3D_Extrude.cpp @@ -1,4 +1,4 @@ -// $Id: 3D_Extrude.cpp,v 1.8 2001-06-02 16:24:51 geuzaine Exp $ +// $Id: 3D_Extrude.cpp,v 1.9 2001-06-06 21:29:58 remacle Exp $ #include "Gmsh.h" #include "Const.h" @@ -16,6 +16,7 @@ static int TEST_IS_ALL_OK; static Surface *THES; static Volume *THEV; static ExtrudeParams *ep; +static Tree_T *Vertex_Bound, *ToAdd = NULL; typedef struct{ int a, b; @@ -43,6 +44,15 @@ void InitExtrude (){ Tree_Swaps = Tree_Create (sizeof (nxn), compnxn); } +/* MEMORY LEAK JF */ +void ExitExtrude (){ + if (Tree_Ares)Tree_Delete(Tree_Ares); + if (Tree_Swaps)Tree_Delete(Tree_Swaps); + if(Vertex_Bound)Tree_Delete (Vertex_Bound); + Tree_Ares = Tree_Swaps = NULL; + ToAdd = Vertex_Bound = NULL; +} + int are_exist (Vertex * v1, Vertex * v2, Tree_T * t){ nxn n; n.a = IMAX (v1->Num, v2->Num); @@ -307,7 +317,6 @@ void Extrude_Simplex_Phase2 (void *data, void *dum){ } } -static Tree_T *Vertex_Bound, *ToAdd = NULL; void Extrude_Vertex (void *data, void *dum){ @@ -637,7 +646,6 @@ int Extrude_Mesh (Volume * v){ } Extrude_Surface3 (s); - //Tree_Ares = Tree_Swaps = NULL; return true; } else{ diff --git a/Mesh/3D_Mesh.cpp b/Mesh/3D_Mesh.cpp index 46a58fedc76ec473cb8aa1b9a6caf9e869655176..7a28cd0049f41e041e886d8ff17e4289eceb9a78 100644 --- a/Mesh/3D_Mesh.cpp +++ b/Mesh/3D_Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: 3D_Mesh.cpp,v 1.18 2001-05-23 07:29:42 geuzaine Exp $ +// $Id: 3D_Mesh.cpp,v 1.19 2001-06-06 21:29:58 remacle Exp $ /* @@ -855,7 +855,7 @@ void Maillage_Volume (void *data, void *dum){ create_NXE (v->Vertices, v->Simplexes, tnxe); for (int i = 0; i < CTX.mesh.nb_smoothing; i++) Tree_Action (tnxe, ActionLiss); - Tree_Delete (tnxe); + delete_NXE (tnxe); Msg(STATUS3, "Swapping edges (last pass)"); SwapEdges3D (THEM, v, 0.5, true); */ diff --git a/Mesh/Create.cpp b/Mesh/Create.cpp index ef49fa4b4c3bf6ca272d87e28db26102fcdcb869..18428a7c88811128fc4c8df4ff9c405f587f3692 100644 --- a/Mesh/Create.cpp +++ b/Mesh/Create.cpp @@ -1,4 +1,4 @@ -// $Id: Create.cpp,v 1.18 2001-06-02 16:24:51 geuzaine Exp $ +// $Id: Create.cpp,v 1.19 2001-06-06 21:29:58 remacle Exp $ #include "Gmsh.h" #include "Const.h" @@ -370,7 +370,9 @@ void End_Curve (Curve * c){ // c->end->lc = DMIN (R*Pi/(fabs(c->Circle.t1-c->Circle.t2)*CIRC_GRAN),c->end->lc); } - c->cp = (float *) malloc (4 * List_Nbr (c->Control_Points) * sizeof (float)); + // MEMORY LEAK (JF) + if (c->cp) Free (c->cp); + c->cp = (float *) Malloc (4 * List_Nbr (c->Control_Points) * sizeof (float)); for (i = 0; i < List_Nbr (c->Control_Points); i++){ List_Read (c->Control_Points, i, &v[0]); c->cp[4 * i] = v[0]->Pos.X; @@ -421,6 +423,7 @@ Curve *Create_Curve (int Num, int Typ, int Order, List_T * Liste, {1, 0, 0, 0.0} }; pC = (Curve *) Malloc (sizeof (Curve)); + pC->cp = NULL; pC->Vertices = NULL; pC->Extrude = NULL; pC->Typ = Typ; @@ -520,6 +523,8 @@ void Free_Curve(void *a, void *b){ List_Delete(pC->TrsfSimplexes); Free(pC->k); List_Delete(pC->Control_Points); + // MEMORY_LEAK (JF) + Free(pC->cp); Free(pC); pC = NULL; } @@ -556,7 +561,7 @@ void Free_Surface(void *a, void *b){ Tree_Action(pS->Simplexes, Free_Simplex); Tree_Delete(pS->Simplexes); List_Delete(pS->TrsfSimplexes); - //Tree_Delete(pS->Vertices);//fait planter l'extrusion (1D-2D-1D boum) + Tree_Delete(pS->Vertices);//fait planter l'extrusion (1D-2D-1D boum) //the vertices are freed globally before List_Delete(pS->TrsfVertices); List_Delete(pS->Contours); diff --git a/Mesh/CrossData.cpp b/Mesh/CrossData.cpp index e2f4e0c4c97e46bfa2f7e3a42c97231f87591d24..ed863269e9a5c38ebce722b6c08ace611ae09b82 100644 --- a/Mesh/CrossData.cpp +++ b/Mesh/CrossData.cpp @@ -1,4 +1,4 @@ -// $Id: CrossData.cpp,v 1.4 2001-01-08 08:05:45 geuzaine Exp $ +// $Id: CrossData.cpp,v 1.5 2001-06-06 21:29:58 remacle Exp $ #include "Gmsh.h" @@ -6,6 +6,23 @@ Tree_T *TreeTemp; +NXE::NXE() +{ + v = NULL; + Liste = NULL; +} + +NXE::~NXE() +{ + // if(Liste)List_Delete(Liste); +} + +void Delete_NXE (void *data, void *dummy) +{ + NXE *pnxe = (NXE*)data; + if(pnxe->Liste)List_Delete(pnxe->Liste); +} + void AddTable (void *data, void *dummy){ Simplex *s; NXE nxe, *pnxe; @@ -33,3 +50,8 @@ void create_NXE (Tree_T * TreeAllNod, Tree_T * TreeAllElg, TreeTemp = TreeAllNXE; Tree_Action (TreeAllElg, AddTable); } + +void delete_NXE (Tree_T * TreeAllNXE){ + Tree_Action (TreeAllNXE, Delete_NXE); + Tree_Delete (TreeAllNXE); +} diff --git a/Mesh/Edge.cpp b/Mesh/Edge.cpp index 00bdb614f5219cda766d08f7fd7022651beea0f4..52dcb872edd8b5365d35612886bda3fa8e3c58dc 100644 --- a/Mesh/Edge.cpp +++ b/Mesh/Edge.cpp @@ -1,4 +1,4 @@ -// $Id: Edge.cpp,v 1.4 2001-01-08 08:05:45 geuzaine Exp $ +// $Id: Edge.cpp,v 1.5 2001-06-06 21:29:58 remacle Exp $ #include "Gmsh.h" #include "Mesh.h" @@ -126,7 +126,16 @@ void EdgesContainer::AddTree (Tree_T * Simplexes, bool EdgesInVolume){ List_Delete (temp); } +void Free_Edge (void *a, void *b) +{ + Edge *e = (Edge*)a; + if(e->Liste)List_Delete(e->Liste); + if(e->Simplexes)List_Delete(e->Simplexes); + if(e->Points)List_Delete(e->Points); +} + EdgesContainer::~EdgesContainer (){ + Tree_Action (AllEdges,Free_Edge); Tree_Delete (AllEdges); } bool EdgesContainer::Search (Vertex * v1, Vertex * v2){ diff --git a/Mesh/Edge.h b/Mesh/Edge.h index 6794c4b6604d15e210d436b24123eaad13f56569..a09fb8c5d6fb91734deeb805579b06a9e48b0791 100644 --- a/Mesh/Edge.h +++ b/Mesh/Edge.h @@ -23,6 +23,13 @@ public : Simplexes = NULL; Points = NULL; } + // MEMORY LEAK (JF) + ~Edge() + { + //if(Liste)List_Delete(Liste); + //if(Simplexes)List_Delete(Simplexes); + //if(Points)List_Delete(Points); + } }; class EdgesContainer diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp index cf8dfc79bf21f659b20a3f48d86d2d8f60d71c15..37f52a8670063fbbdb8178ad7f56b7aed19b2982 100644 --- a/Mesh/Generator.cpp +++ b/Mesh/Generator.cpp @@ -1,4 +1,4 @@ -// $Id: Generator.cpp,v 1.18 2001-06-06 15:30:18 remacle Exp $ +// $Id: Generator.cpp,v 1.19 2001-06-06 21:29:58 remacle Exp $ #include "Gmsh.h" #include "Const.h" @@ -88,7 +88,7 @@ void Maillage_Dimension_2 (Mesh * M){ Tree_Action (M->Surfaces, Maillage_Surface); - t2 = Cpu(); + t2 = Cpu(); M->Statistics[13] = t2 - t1; } @@ -124,6 +124,8 @@ void Maillage_Dimension_3 (Mesh * M){ void Init_Mesh (Mesh * M, int all){ THEM = M; + + ExitExtrude(); if (M->Vertices){ Tree_Action (M->Vertices, Free_Vertex); diff --git a/Mesh/Mesh.h b/Mesh/Mesh.h index 5e2d0245699f129b3ed1bac155d6f494b848886e..448fc596351ad3bf52a7609336562ce4920046e2 100644 --- a/Mesh/Mesh.h +++ b/Mesh/Mesh.h @@ -153,10 +153,13 @@ struct _MAILLAGE{ int zone; }; -typedef struct{ +class NXE{ + public : Vertex *v; List_T *Liste; -}NXE; + ~NXE(); + NXE(); +}; typedef struct{ int Num; /* Numero */ @@ -413,6 +416,7 @@ void Maillage_Volume (void *data, void *dum); int Extrude_Mesh (Curve * c); int Extrude_Mesh (Surface * s); int Extrude_Mesh (Volume * v); +void ExitExtrude(); int MeshTransfiniteSurface (Surface *sur); int MeshTransfiniteVolume (Volume *vol); diff --git a/Mesh/Smoothing.cpp b/Mesh/Smoothing.cpp index c086573a3db0073610bdd5e1c1195f0cb6ea29dc..ab13c852d411a83fceb6d9462388bac4aac4e7b4 100644 --- a/Mesh/Smoothing.cpp +++ b/Mesh/Smoothing.cpp @@ -1,4 +1,4 @@ -// $Id: Smoothing.cpp,v 1.4 2001-01-08 08:05:46 geuzaine Exp $ +// $Id: Smoothing.cpp,v 1.5 2001-06-06 21:29:58 remacle Exp $ #include "Gmsh.h" #include "Const.h" @@ -50,24 +50,20 @@ void AmelioreSurface_EliminationTripet (Surface * surf, Mesh * m, Tree_T * tnxe) void ActionLiss (void *data, void *dummy){ - static int deb = 1; - static List_T *nodes; + List_T *nodes; NXE *pnxe; Simplex *s; double X, Y, Z, Sum; int i, j; - if (deb){ - deb = 0; - nodes = List_Create (2, 2, sizeof (Vertex *)); - } - List_Reset (nodes); + pnxe = (NXE *) data; /* On Ne Lisse Point Les Points sur les courbes (quelle horreur) */ if (pnxe->v->ListCurves) return; + nodes = List_Create (2, 2, sizeof (Vertex *)); X = Y = Z = Sum = 0.0; double volume_before = 0.0; @@ -117,7 +113,7 @@ void ActionLiss (void *data, void *dummy){ pnxe->v->Pos.Y = yold; pnxe->v->Pos.Z = zold; } - + List_Delete(nodes); }