2016-06-19 14 views
-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; 
} 
+0

メモリ割り当ての問題を修正した後、 'scanf("%d "、item-> frame-> duration)'を 'scanf("%d "、&item-> frame-> duration) 'とする。メモリ割り当てと 'scanf()'に対するすべての呼び出しがうまく動作し、エラーを適切に処理することも検証する必要があります。一般的には、I/Oをリスト操作のようなものから分離する方が良いですが、それは後で残すことができます。 –

答えて

3

あなたはalloc「あなたLink構造体にnameまたはpathはdたことがありません。初期化されていないメモリにはscanfです。

item->frame = (frame_t*)calloc(1, sizeof(frame_t)); 

// You need to add something like: 
item->frame->name = (char *)calloc(1, some_string_size); 
item->frame->path = (char *)calloc(1, some_string_size); 
+0

まだ動作していません... 私はそれを行います: http://pastebin.com/8ZvVSXTN –

関連する問題