Probleme delete[]

armasousou Messages postés 1268 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
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

Utilisateur anonyme
 
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