我做了一个名为cell
的类。这个类里面有一个cell
指针数组。标题是这样的:在C++中删除指针数组时,析构函数崩溃了
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循环代码完美结束,但我知道这也必须删除。 我想我正确地写了析构函数,不是吗?
使用调试器打开程序,它将在崩溃点 – user5821508
'单元格c1,c2,c3,c4,c5,c6,c7,c8;中断;'< - 所有这些超出了方法结尾的范围,该地址无效。 – crashmstr
变量'c1','c2'等都不存在于函数'createcells'的范围之外。所以存储指向它们的指针会让你有一个充满悬挂指针的数组。 – CoryKramer