Я создал класс с именем cell
. Внутри этого класса есть массив cell
указателей. Заголовок выглядит так:
class cell
{
public:
cell();
cell *c[8];
void creatcells();
virtual ~cell();
..
}
и файл cpp
выглядит так:
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;
}
Но каждый раз, когда программа завершается, происходит сбой. Почему?
Я пробовал без if (c[i]!=NULL)
, но это не помогает. Только без цикла for код заканчивается отлично, но я знаю, что это тоже нужно удалить. Думаю, я правильно написал деструктор, не так ли?
cell c1,c2,c3,c4,c5,c6,c7,c8;
‹- все это выходит за рамки в конце метода и адрес недействителен. - person crashmstr   schedule 27.07.2017c1
,c2
и т.д. не существует вне области действия функцииcreatecells
. Таким образом, хранение указателей на них приведет к тому, что у вас будет массив, полный висящих указателей. - person Cory Kramer   schedule 27.07.2017delete [] c
также не определен. - person molbdnilo   schedule 27.07.2017