c - 释放指向其他结构的结构中的指针

标签 c pointers struct

假设我有一些数据结构,其中结构具有指向其他结构的指针,例如链表。列表中的每个元素都有一个指向列表中另一个元素的指针

struct node{
  char* data;
  node* next;
};

当释放分配给这个结构的内存时,我知道我需要先专门释放数据,因为我必须专门为它分配内存。但是接下来呢?它指向另一个节点,我相信释放它会释放下一个指向的实际节点。

清理时只释放整个节点是否足够,或者有什么方法可以释放指针而不释放它指向的结构?

最佳答案

这取决于您如何在内存中构建结构。任何 malloc 都必须与 free 保持平衡。一旦指向的 next 节点被释放,它就不再有效。

// create root
node* n1 = calloc(1, sizeof(node));

// create/link another node
n1->next = calloc(1, sizeof(node));

// destroy/unlink 2nd node
free(n1->next);
n1->next = NULL;

// destroy 1st node
free(n1);

关于c - 释放指向其他结构的结构中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32032030/

相关文章:

c - 没有花括号的嵌套循环

c - 确定在堆中分配的缓冲区的大小

c++ - 在 C++11 中初始化 C++ std::array of struct

c++ - 如何访问结构和枚举成员形成一个类?

arrays - 下标值既不是数组也不是指针错误

c++ - 指向非 volatile 数据的 volatile 指针

c - 使用 printf 的 Linux 的 gotoxy() 实现

无法解释此 C 代码片段的行为

java - 在运行时获取对象的引用数量

c - 如何检查 CLI 程序是否正在等待来自标准输入的输入?