首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C中释放结构的动态链表

在C中释放结构的动态链表
EN

Stack Overflow用户
提问于 2013-03-06 06:09:15
回答 2查看 1.3K关注 0票数 3

我有一堆结构看起来都像

代码语言:javascript
运行
复制
typedef struct {
  A[1..100] *next; // this is not an array, just indicating A1 or A2 or A3 and so on
  //other stuff that varies from struct to struct
} A[1..100] // A1, A2, and so on

我生成了几个不同类型结构的链表。在函数中的某处,我使用如下所示的方式分配内存

代码语言:javascript
运行
复制
A55 *struct_list;
A55 *next_in_list;

struct_list = (A55 *)malloc(sizeof(A55));
(*struct_list).next = NULL;

//some loop
  next_in_list = (A55 *)malloc(sizeof(A55));
  (*next_in_list).next = struct_list;
  struct_list = next_in_list;

在循环的末尾,struct_list是指向链表末尾的指针。

我希望有一个单独的函数,可以释放任何列表,而不考虑填充它的结构。我觉得下面的方法可能行得通,但我需要的东西不会违反任何规则,而且可能是实现安全的:

代码语言:javascript
运行
复制
void freeStruct(*void start){

     void ** current, * next;
     current = (void **) start;

     do{
       next = *current;
       free(current);
       current = (void **) next;
     }while(current != NULL)
    }

我的问题是,对于所有类型的指针,NULL是否具有相同的数值,包括struct。还有,有没有更好的方法来做到这一点,而不必为不同的struct定义复制相同的函数100次?

EN

Stack Overflow用户

回答已采纳

发布于 2013-03-06 06:12:55

NULL始终具有相同的值: 0。

你可以做你想做的。这样做的方法是将"next“指针放在结构的最开始处,这样对于每个结构,它总是在相同的位置。

如果您有比单个"next“指针更多的结构,那么您可能应该将所有结构都创建为一个结构,然后将该结构放在每个结构的开头。例如,如果您要创建一个包含"prev“和"next”指针的双向链表,我建议您使用这两个指针创建一个结构。

如果每个结构都可以简单地释放,那么只需在每个指针上调用free()函数即可。如果有时需要运行清理函数,则应使通用链接列表释放函数接受指向清理函数的指针,并在列表中到达每个结构时调用清理。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15235120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档