J'ai créé une classe nommée cell
. Dans cette classe, il y a un tableau de pointeurs cell
. L'en-tête ressemble à ceci:Destructeur plantant lors de la suppression d'un tableau de pointeurs en C++
class cell
{
public:
cell();
cell *c[8];
void creatcells();
virtual ~cell();
..
}
et le fichier cpp
ressemble à ceci:
cell::cell()
{
//ctor
for(int i=0;i<8;i++)
{
c[i]=NULL;
}
}
void cell::creatcells()
{
cell c1,c2,c3,c4,c5,c6,c7,c8;
c[0]=&c1;
c[1]=&c2;
c[2]=&c3;
c[3]=&c4;
c[4]=&c5;
c[5]=&c6;
c[6]=&c7;
c[7]=&c8;
}
cell::~cell()
{
for(int i=0; i<8; i++)
{
if (c[i]!=NULL)
{
delete c[i];
}
}
delete[] c;
}
Mais chaque fois que se termine le programme, il se bloque, pourquoi? Je ai essayé sans if (c[i]!=NULL)
, mais cela ne aide pas. Seulement sans la boucle for le code se termine parfaitement, mais je sais que cela doit être supprimé aussi. Je pense que j'ai écrit le destructeur correctement, n'est-ce pas?
Ouvrir le programme avec le débogueur et il va se casser sur le point de crash – user5821508
'cellule c1, c2, c3, c4, c5, c6, c7, c8;' <- tous sont hors de portée à la fin de la méthode et l'adresse n'est pas valide. – crashmstr
Aucune des variables 'c1',' c2', etc n'existe en dehors de la portée de la fonction 'createcells'. Donc stocker des pointeurs sur eux va vous amener à avoir un tableau plein de pointeurs qui pendent. – CoryKramer