【发布时间】:2020-07-02 21:23:12
【问题描述】:
最近,当我为 Stack 实现编写代码时。我遇到了这个疑问。请帮助我度过难关。代码如下所示。
struct Stack{
int top;
int capacity;
int *array;
}
Stack* createStack(int capacity){
Stack *S = new Stack;
S->capacity = capacity;
S->top = -1;
S->array = new int[capacity];
return S;
}
void Delete(Stack *S){
delete S->array;
delete S;
}
现在我的疑问在于删除功能。正如我们所见,S 指向的是 Stack 类型的内存块。在其中还有另一个指针指向 int 类型的块数组。 不删除数组块直接删除S块会怎样?
【问题讨论】:
-
您会发生内存泄漏,如果您继续这样做,您将耗尽内存。这就是你要找的答案吗?顺便提一句。您的代码具有未定义的行为,因为您在由数组
new表达式分配的指针上使用了delete。您必须改用delete[]。 -
这就是为什么类(包括标记为
struct的东西)有析构函数。~Stack()应该删除array。但是Stack也需要构造函数和成员函数。这段代码是用 C++ 编写的 C,即两全其美。
标签: c++ pointers data-structures stack c++14