Ich machte eine Klasse mit dem Namen cell
. Innerhalb dieser Klasse gibt es eine Reihe von cell
Zeigern. Der Header sieht wie folgt aus:Destruktor Absturz beim Löschen eines Arrays von Zeigern in C++
class cell
{
public:
cell();
cell *c[8];
void creatcells();
virtual ~cell();
..
}
und die cpp
Datei sieht wie folgt aus:
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;
}
Aber jedes Mal, endet das Programm, es stürzt ab, warum?
Ich versuchte ohne if (c[i]!=NULL)
, aber das hilft nicht. Nur ohne die for-Schleife endet der Code einwandfrei, aber ich weiß, dass dies auch gelöscht werden muss. Ich glaube, ich habe den Destruktor korrekt geschrieben, oder?
Öffnen Sie Programm mit Debugger und es bricht Crashpunkt – user5821508
'Zelle C1, C2, C3, C4, C5, C6, C7, C8;' <- alle diese sind am Ende der Methode und Die Adresse ist nicht gültig. – crashmstr
Keine der Variablen 'c1',' c2' usw. existiert außerhalb des Geltungsbereichs der Funktion 'createcells'. Das Speichern von Zeigern führt dazu, dass Sie ein Array voller fliegender Zeiger haben. – CoryKramer