我将使用链表实现堆栈。此外,我想使用类似模板的东西。因此,我得到了这样的结构:
#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)”之后设置了两个断点。before freeingafter freeing但是我对此有些怀疑。我认为我们正在删除为指针分配的内存,但是值仍在内存中。我在作假吗?
free(a)
释放对象a
指向的对象。它不会释放that对象指向的对象。因此它将释放stack
对象,但不会释放任何node
对象。