は動的にネストされた階層内の「内部」構造体を割り当てることがことが望ましいですか?親構造体が動的に割り当てられている場合でも、それは重要ですか?なぜ/どのように重要ですか?異なる、一見矛盾する、メモリの意味が私が扱っているコードベースで扱われる方法の意味を理解しようとしています。優先配分
struct Foo_type {
int i;
}; typedef struct Foo_type Foo;
struct Bar_type {
Foo* f;
}; typedef struct Bar_type Bar;
int main() {
Bar* b = malloc(sizeof(Bar));
b->f = malloc(sizeof(Foo));
/* yada yada yada */
free(b->f);
free(b);
return 0;
}
は、彼らが異なる/等価です:とは対照的に
struct Foo_type {
int i;
}; typedef struct Foo_type Foo;
struct Bar_type {
Foo f;
}; typedef struct Bar_type Bar;
int main() {
Bar* b = malloc(sizeof(Bar));
/* yada yada yada */
free(b);
return 0;
}
:たとえば
のメリットは何ですか?
(1)単純です。 (2)はより柔軟である。あなたが本当に必要でない限り(1)を好む(2)。 – Matt
@Matt Ahhは理にかなっています。だから、はるかに明確な事実の後には:)基本的には2で行く、その後のfooのサイズがわからない場合は...本当に、原則として、すべてのあなたが得るということでしょうか? –
はい、正しいと思います。 – Matt