Bonjour à tous,

J'ai un comportement bizarre lorsque j'essaie de libérer un double *, membre de ma classe.

Voici les détails :
Code : 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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//header
class CPolygon  
{
public:
	CPolygon();
	virtual ~CPolygon();
 
	CPolygon( const CPolygon &);
 
	std::vector<double> pts;
 
	double* bounds;
};
 
//implem
CPolygon::CPolygon()
{
	bounds=0;
}
 
CPolygon::~CPolygon()
{
	if(bounds)
	{
		delete []bounds;
		bounds=0;
	}
}
 
CPolygon::CPolygon( const CPolygon &poly)
{
	if(!bounds)
		bounds = new double[4];
 
	if(poly.bounds)
	{
		for(int i=0; i<4; i++)
			this->bounds[i] = poly.bounds[i];
	}
}
Dans une autre classe, je manipule un std::vector<CPolygon> et au moment du resize, ça plante dans le constructeur de copie dans le for() car this->bounds n'est pas correctement initialisé (0xcdcdcd).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
//std::vector<CPolygon> klines
if(klines.size()==0)
{
	CPolygon nullpoly;
 
	klines.resize(2,nullpoly);
	...
}
Je ne comprends pas ce comportement vu que je pensais avoir tout fait pour allouer correctement mon bounds dans tous les cas.

Quelqu'un peut-il m'expliquer le soucis ?

Merci par avance.