1

このプログラムで構造体を使用して整理することにしたので、構造体のチェーンができました。私の質問は、別の構造体内にある構造体を malloc する必要があるかどうかです。例えば:

typedef struct OnlineS {
struct BBSIS *bbsi;
struct BBVIS *bbvi;
struct VBVIS *vbvi;
} *OnlineP;

typedef struct BBSIS{
struct FirstFitS *ff;
struct BestFitS *bf;
struct NextFitS *nf;
int itemNum;
int binNum;
int binMin;
int binMax;
int *items;
}*BBSIP;

などなど、私の宣言と malloc は次のようになりますか?

OnlineP on = malloc(sizeof (struct OnlineS));
on->bbsi = malloc(sizeof (struct BBSIS));
on->bbsi->bf = malloc(sizeof (struct BestFitS));
on->bbsi->nf = malloc(sizeof (struct NextFitS));
on->bbsi->ff = malloc(sizeof (struct FirstFitS));
on->bbvi = malloc(sizeof (struct BBVIS));
on->bbvi->bf = malloc(sizeof (struct BestFitS));
//ETC
4

2 に答える 2

0

構造体内の構造体へのポインターを使用する場合は、そのためのメモリも管理する必要があります。(malloc/フリー)

構造体内で構造体を使用する場合、内部構造体のメモリを管理しません。それらは外部構造体の一部であるため、その必要はありません。

外側の構造体で構造体へのポインターを使用するため、malloc と free を使用する必要があります。

最初に外側の構造体にメモリを割り当ててから、内側の構造体へのすべてのポインタを null に設定するか、メモリを割り当てます。

于 2012-11-10T14:11:10.447 に答える
0

構造体に構造体がありません。

構造体にポインターがあり、ポインター用のメモリが割り当てられています。

次の構成を検討してください。

typedef struct node {
   struct node* next;
}

(これは非常に一般的です - リンクされたリスト)

いくつのノードを割り当てる必要がありますか?

于 2012-11-10T14:12:22.293 に答える