如何在 C 中释放链表



在C语言中,我有这样的东西:

typedef struct bucket {
int value;
struct bucket *next;
} Bucket;
typedef struct table {
int size;
Bucket **buckets;
} Table;

现在我做Table *t = malloc(sizeof(Table));

t->buckets = calloc(10, sizeof(Bucket));

释放表 *t 是free(t) ; 对吗?

现在,我如何能够释放存储桶链表和每个节点?

你应该以

对称的方式为每个malloc/calloc有一个相应的free调用:

Table *t = malloc(sizeof(Table));
t->buckets = calloc(10, sizeof(Bucket));
...
free(t->buckets);
free(t);

如果您错过了释放t->buckets,您将泄漏内存,因为 Table 结构仅包含指向存储桶的指针,不包含它们。编译器也不会为您插入它。

可能出错的另一件事是释放节点,然后尝试访问下一个节点,因此您需要先保存下一个指针。

Bucket *bptr, *next;
bptr = *t;
while (bptr) {
    next = bptr->next;
    free(bptr);
    bptr = next;
} 
free(t);
t=NULL;

相关内容

  • 没有找到相关文章

最新更新