-2
私は2つの構造体を持っている:ネストされた構造体に割り当てるメモリ
最初:
struct Link
{
frame_t *frame;
struct Link *next;
};
typedef struct Link link_t;
そして第二に:
私はリンク構造体とそのないためにメモリを割り当てるために機能してみてくださいstruct Frame
{
char *name;
unsigned int duration;
char *path; // may change to FILE*
};
typedef struct Frame frame_t;
作業。関数へ
コール:
link_t* list = NULL;
list = AddItemToList(list);
そして、これが関数である:
link_t* AddItemToList(link_t* item)
{
if (item == NULL)
{
item = (link_t*)calloc(1, sizeof(link_t));
item->frame = (frame_t*)calloc(1, sizeof(frame_t));
printf("Please insert frame path: ");
scanf("%s", item->frame->path);
printf("Please insert frame duration(in miliseconds): ");
scanf("%d", item->frame->duration);
printf("Please choose a name for that frame: ");
scanf("%s", item->frame->name);
}
else item->next = AddItemToList(item-> next);
return item;
}
メモリ割り当ての問題を修正した後、 'scanf("%d "、item-> frame-> duration)'を 'scanf("%d "、&item-> frame-> duration) 'とする。メモリ割り当てと 'scanf()'に対するすべての呼び出しがうまく動作し、エラーを適切に処理することも検証する必要があります。一般的には、I/Oをリスト操作のようなものから分離する方が良いですが、それは後で残すことができます。 –