我有一堆结构看起来都像
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我生成了几个不同类型结构的链表。在函数中的某处,我使用如下所示的方式分配内存
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是指向链表末尾的指针。
我希望有一个单独的函数,可以释放任何列表,而不考虑填充它的结构。我觉得下面的方法可能行得通,但我需要的东西不会违反任何规则,而且可能是实现安全的:
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次?
发布于 2013-03-06 06:12:55
NULL始终具有相同的值: 0。
你可以做你想做的。这样做的方法是将"next“指针放在结构的最开始处,这样对于每个结构,它总是在相同的位置。
如果您有比单个"next“指针更多的结构,那么您可能应该将所有结构都创建为一个结构,然后将该结构放在每个结构的开头。例如,如果您要创建一个包含"prev“和"next”指针的双向链表,我建议您使用这两个指针创建一个结构。
如果每个结构都可以简单地释放,那么只需在每个指针上调用free()函数即可。如果有时需要运行清理函数,则应使通用链接列表释放函数接受指向清理函数的指针,并在列表中到达每个结构时调用清理。
发布于 2013-03-06 10:14:51
您需要遍历整个列表,同时一次释放一个指针。
https://stackoverflow.com/questions/15235120
复制相似问题