如何删除作为数组元素的指针

时间:2015-01-01 19:50:43

标签: c++ destructor

下面是构造函数和析构函数的代码。析构函数成功地破坏了由选项1创建的数组。如果我们在选项2中有多个数组怎么办。相同的析构函数编码是否足以删除或者需要更改代码。

#include "iostream"
class Mystack
{
private:
    int capacity;
    int top[3];
    int *input;//option1        
    int *input[3];//option 2
public:
    Mystack();
    ~Mystack();
    void push(int stackNum, int elem);
    void pop(int stackNum);
    void display();
};

Mystack::Mystack()
{
    capacity = 3;
    top[3] = { -1 };
    input[] = new int[capacity]; //option 1     
    input[3] = new int[capacity];// option 2
}

Mystack::~Mystack()
{
    delete[]input;// Works for option 1. Should it be same for option 2??
}

1 个答案:

答案 0 :(得分:1)

您的int *input[3]是一个原始数组,其中包含指向整数的指针,a.k.a int*。您的代码中有很多错误,例如您正在使用top[3]访问数组 top 的第4个位置,其中只有3个元素,并且您正在分配{{1它想象中的第4个元素,而不是int。

这些声明也无效,因为您对2个不同的变量使用相同的标识符:

{ -1 }

如果你想删除一个指针数组分配的内存,我会每次int *input;//option1 int *input[3];//option 2 遍历数组调用:

delete []

这将释放指针分配给整数for(int i=0; i<3; i++) delete [] input[i]; input[0]input[1]的所有内存。