C - 通过释放整个对象来释放linked_list的节点



我会使用链接列表实现堆栈。此外,我想使用类似模板的东西。 因此,我得到了这样的结构:

  1. 节点
#define node(T)            
struct node_##T {        
T value;               
struct node_##T *next; 
}
  1. 堆栈
#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对象。

相关内容

  • 没有找到相关文章

最新更新