我会使用链接列表实现堆栈。此外,我想使用类似模板的东西。 因此,我得到了这样的结构:
- 节点
#define node(T)
struct node_##T {
T value;
struct node_##T *next;
}
- 堆栈
#define stack(T)
struct stack_##T {
size_t size;
node(T) * begin, *end;
}
最后我想释放堆栈。我总是使用 while/递归来。像这样沉吟:
while (begin != NULL)
{
temp = begin;
begin = begin->next;
free(temp);
}
就我而言,这种方法的使用更像是比较的,而不是通常的。因此,我只是释放对象。
#include "stack.h"
typedef char* string;
int main() {
stack(string)* a;
stack_constructor(string, a);
stack_resize(a, 5);
free(a);
return (0);
}
调试显示一切正常。我在"free(a("之前和"free(a("之后设置了两个断点。 释放之前 释放后 但我对这些有一些怀疑。我认为我们正在删除为指针分配的内存,但值仍在内存中。我弄错了吗?
free(a)
释放a
指向的对象。它不会释放该对象指向的对象。因此,它将释放stack
对象,但不会释放任何node
对象。