Fuite de mémoire et utilisation de vecteurs contenant des structures en C contenant des pointeurs
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:
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:
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 :
Code:
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;
}; |
ensuite j'ai des map du style :
Code:
1 2
|
map<double,vector<PolygoneDalleAvecInfos>> mMap; |
bref c'est compliqué.
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 ?