0

在 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); 正确的?

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

4

2 回答 2

1

您应该以对称的方式free对每个malloc/进行相应的调用:calloc

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

如果你错过了 freeing t->buckets,你会泄漏内存,因为Table结构只包含一个指向桶的指针而不包含它们。编译器也不会为您插入它。

于 2013-10-27T19:17:14.457 回答
0

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

Bucket *bptr, *next;

bptr = *t;
while (bptr) {
    next = bptr->next;
    free(bptr);
    bptr = next;
} 
free(t);
t=NULL;
于 2013-10-27T23:03:33.400 回答