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

対称的な方法で、freefor every malloc/に対応する呼び出しが必要です。calloc

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

を解放しないと、構造体にはバケットへのポインタのみが含まれ、バケットは含まれないt->bucketsため、メモリ リークが発生します。Tableコンパイラもそこに挿入するつもりはありません。

于 2013-10-27T19:17:14.457 に答える