Pb de destructeur
pom
-
pom -
pom -
Bonjour, mon destructeur entraine un segmentation fault.
J'ai fait une classe YP qui contient des objets d'une classe Vector.
Voici une partie de la classe Vector
template <class T> class Vector
{
public:
T *cc;
int size;
Vector(int csize = 0){init (csize);}
void init(int csize = 0);
void destroy()
{
if(cc!=NULL)
{
delete [] cc;
size = 0;
}
}
~Vector()
{
destroy();
}
blabla
};
Voici ma classe YP
typedef Vector<escalar> VEC;
class YP
{
public:
VEC phix;
VEC phiy;
YP(const VEC & phix_,const VEC & phiy_):phix(phix_),phiy(phiy_) {}
~YP()
{
phix.destroy();
phiy.destroy();
}
blabla
};
Je n'arrive pas à voir la cause de mon segmentation fault.
Pom
J'ai fait une classe YP qui contient des objets d'une classe Vector.
Voici une partie de la classe Vector
template <class T> class Vector
{
public:
T *cc;
int size;
Vector(int csize = 0){init (csize);}
void init(int csize = 0);
void destroy()
{
if(cc!=NULL)
{
delete [] cc;
size = 0;
}
}
~Vector()
{
destroy();
}
blabla
};
Voici ma classe YP
typedef Vector<escalar> VEC;
class YP
{
public:
VEC phix;
VEC phiy;
YP(const VEC & phix_,const VEC & phiy_):phix(phix_),phiy(phiy_) {}
~YP()
{
phix.destroy();
phiy.destroy();
}
blabla
};
Je n'arrive pas à voir la cause de mon segmentation fault.
Pom
2 réponses
-
if(cc!=NULL)
{
delete [] cc;
cc = NULL; // IL TE MANQUAIT CETTE LIGNE
size = 0;
}
en effet tu appelles destroy() explicitement
mais desroy() est AUUSI appelée par ton destruteur
(donc dans ce 2ème appele tu fais delete d'une zone DEJA délétée ... ;-) )
à bientôt,
marvinrouge -
Merci beaucoup !
Mais aurais-je pu ne pas faire de destructeur de ma classe YP car mes Vector auraient-été détruits par le destructeur de la classe Vector ou pas ?
Merci encore
Pom