Bonjour à tous,
Dans mon programme en C++ j'utilise une librairie C nommée General Polygon Clipper qui définit la structure gpc_polygon comme suit :
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 typedef struct /* Polygon vertex structure */ { double x; /* Vertex x component */ double y; /* vertex y component */ } gpc_vertex; typedef struct /* Vertex list structure */ { int num_vertices; /* Number of vertices in list */ gpc_vertex *vertex; /* Vertex array pointer */ } gpc_vertex_list; typedef struct /* Polygon set structure */ { int num_contours; /* Number of contours in polygon */ int *hole; /* Hole / external contour flags */ gpc_vertex_list *contour; /* Contour array pointer */ } gpc_polygon;
Je dispose également d'une fonction permettant de libérer la mémoire relative à un gpc_polygon :
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 void gpc_free_polygon(gpc_polygon *p) { int c; for (c= 0; c < p->num_contours; c++) FREE(p->contour[c].vertex); FREE(p->hole); FREE(p->contour); p->num_contours= 0; }
J'utilise dans mon code des std::vector de gpc_polygon, et même des structures C++ ayant comme champ un gpc_polygon voire un std::vector de gpc_polygon ...
Exemples :
ensuite j'ai des map du style :
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 struct PolygoneDalleAvecInfos { ... gpc_polygon polygone_gpc; }; struct Niveau { ... vector<gpc_polygon> polygonesMursInternesEtageInferieurGPC; };
bref c'est compliqué.
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2map<double,vector<PolygoneDalleAvecInfos>> mMap;
J'ai des fuites de mémoire en pagaille... j'ai compris que c'était dû aux constructeurs par recopie qui ne copiaient que les pointeurs, ainsi qu'à la non-libération de mémoire lorsque ces structures sont détruites... faut-il et peut-on redéfinir l'opération = pour ma structure C ? et pour la libération de mémoire ?
Partager