Probleme delete[]

Fermé
armasousou Messages postés 1270 Date d'inscription dimanche 16 août 2009 Statut Membre Dernière intervention 30 décembre 2016 - 24 avril 2013 à 14:42
 Utilisateur anonyme - 26 avril 2013 à 07:52
Bonjour à tous,

j'ai un gros problème sur mon delete ... je crois que c'est aussi un problème avec mon operator=.

J'ai une classe base qui est alloué/supprimer dynamiquement qui contient une matrice (int**), et une classe image qui est un tableau de base. (base* img)

FICHIER BASE

base::base(int a, int b)
{
...
matrice = new int*[a];

for(int i=0; i<a; i++)
matrice[i] = new int[b];
}

base::operator=(base& b)
{
this->~base();
...
matrice = new int*[b.a];

for(int i=0; i<b.a; i++)
matrice[i] = new int[b.b];
}

base::~base()
{
for(int i=0; i<a; i++)
delete[] matrice[i];

delete [] matrice;
}


FICHIER IMAGE

image::operator=(image& a)
{
this->~image();
...
img = new base[dim];
for(int i=0; i<dim; i++)
img[i] = a[j]; //utilisation du "=" de base
}

image::~image()
{
delete[] img;
}


Merci d'avance pour votre aide =)

1 réponse

Salut,

Juste une question ... pourquoi tu fais appel au destructeur dans l'opérateur = ?

Essaies plutôt de créer un membre qui s'appel reset et qui va se charger de faire le même travail (Et encore, c'est entièrement inutile car à chaque fois que tu fais appel au destructeur, tu viens de créer un nouvel objet tout propre ...) car un appel au destructeur ne signifie pas seulement un simple appel d'une simple fonction, il me semble que ta classe va disparaître sur le moment (Son pointeur sera null) et les prochains appels déclencheront sûrement une exception.

http://www.cplusplus.com/reference/new/operator%20delete%5B%5D/
http://www.cplusplus.com/reference/new/operator%20delete/

Musicalement,
DJ Fire-Bl@ck.
0