删除 C++ 中的指针数组时析构函数崩溃

柴诺姆

我做了一个名为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 循环,代码才能完美结束,但我知道这也必须删除。我想我正确地写了析构函数,不是吗?

高拉夫·塞加尔
void cell::creatcells()
 {
   cell c1,c2,c3,c4,c5,c6,c7,c8;

   c[0]=&c1;
   c[1]=&c2;
   ...

以上所有cell对象在结束时自动销毁createcells()。所以delete c[i];在析构函数中是UB。你想要的是

 c[0]= new cell();
 c[1]= new cell();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C ++中删除指针

C ++ 11在派生类中删除的析构函数

C ++ 11析构函数=删除

在析构函数中引发异常时,为什么不调用重载的删除?

C ++:如何正确删除指向指向类析构函数中的指针的数组

删除树项析构函数时未调用

通过析构函数删除时崩溃

在调用析构函数之前删除C ++动态成员数组

C ++-如何在析构函数中删除子类

C ++:删除对象而不调用析构函数

C ++析构函数删除共享内存

删除数组而不调用析构函数

删除包含动态数组作为数据成员的对象时的C ++析构函数用法

为类编写复制构造函数会在删除析构函数中的对象时导致意外崩溃

析构函数删除main中声明的动态数组

析构函数中的访问冲突“删除”指针

C ++调用析构函数并不会真正从内存中删除对象

未调用C ++析构函数/未删除对象-潜在的内存泄漏

当您具有二维数组(在C ++中)时,调用析构函数的正确方法是什么?

删除析构函数中的指针

在类的析构函数中删除数组

C ++:为什么析构函数的设计不像删除指针?

C#,删除带有子线程的对象时,GC没有调用析构函数

删除C ++中的数组导致程序崩溃

删除析构函数中由new在C ++中的方法创建的类的成员

C ++析构函数崩溃程序

C++ - 析构函数只是释放内存还是实际删除对象?

如果“所有者”,C++ 类析构函数删除成员?

C++ 你能在构造函数或析构函数中引用 this 指针吗?