如何删除作为数组元素的指针
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]
.
的指针分配的所有内存
下面是构造函数和析构函数的代码。析构函数成功地破坏了选项 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]
.