【解決方法】構造体ポインタにメモリを割り当てるにはどうすればよいですか


私は2つの構造を持っています

C
struct list
{
	char *name;
	int ID;
	int marks[5];
}

struct Employee
{  
    char *school_name;
    unsigned long int ID;
    struct list * student_list;  
	//here i want to use pointer only, because i don't know student si
};

struct Employee high_list;

ここでは、1 つの学校の 20 人の生徒の名前、ID、マークが必要です。 お気に入り

C
high_list.student_list[0].ID =20;
high_list.student_list[2].ID =20;
high_list.student_list[3].ID =30;
high_list.student_list[4].ID =30;
high_list.student_list[0].mark[0] =20;
high_list.student_list[2].mark[1] =20;
high_list.student_list[3].mark[0] =30;
high_list.student_list[4].mark[4] =30;

20人の学生リストにメモリを割り当てるにはどうすればよいですか;
.student_list=(構造体リスト *)malloc(sizeof(構造体リスト)); //これは 1 つのリスト用です
if i do(構造体リスト) *20 ???

20人の学生に割り当てたい

私が試したこと:

動的メモリ割り当て
malloc(sizeof(構造体リスト)*20)

解決策 1

実際、どちらかを使用できます

C
high_list.student_list = (struct list *) malloc( sizeof(struct list ) * 20);

また

C
high_list.student_list = (struct list *) calloc( 20, sizeof(struct list) );

ところで、次のことを忘れないでください。

  • の戻り値を確認してください malloc (また calloc) 呼び出し。メモリ割り当てが失敗する可能性があるためです。
  • 割り当てられたメモリが不要になったら解放します。

解決策 3

パリニの解決策は提案どおりに機能します。

C
struct Employee high_list;

high_list.student_list = (struct list *) calloc(20, sizeof(struct list));
if (high_list.student_list == NULL) return -1;

もちろん、インクルード および を使用する必要があり、構造定義の最後にセミコロンが必要です。

注意: 文字列 name と school_name については、使用するとすぐにメモリも必要になります!

解決策 2

いいえ、最初のメンバーにのみ割り当てています.ie

high_list.student_list

みたいに使えない

high_list.student_list[0]
                      high_list.student_list[1]....e.t.c

コメント

タイトルとURLをコピーしました