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

How to delete pointers that are elements of an array

下面是构造函数和析构函数的代码。析构函数成功地破坏了选项 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??
}

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

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

int *input;//option1        
int *input[3];//option 2

如果你想删除由指针数组分配的内存,我会遍历数组调用,每次 delete [] 在它们上:

for(int i=0; i<3; i++)
     delete [] input[i];

这将释放由指向整数 input[0]input[1]input[2].

的指针分配的所有内存