2012-04-03 21 views
0

*user_playlistをプレイリストノードに指定すると助けが必要です。これどうやってするの?1つの構造体を他の構造体に指す方法

struct playlist_ { 
    int album; 
    int track_num; 
    struct playlist_ *next; 
}; 
typedef struct playlist_ playlists; 

struct users_ { 
    int user_ID; 
    playlists *user_playlist; 
    struct users_ *next; 
}; 
typedef struct users_ users; 

p_users = (users *)malloc(sizeof(users *)); 
p_users -> user_ID = account_number; 
head_users = p_users; 
head_users -> next = NULL; 
users_pointer = head_users; 

p_playlists = (playlists *)malloc(sizeof(playlists)); 
curr_playlists = p_playlists; 
curr_playlists -> album = NULL; 
curr_playlists -> track_num = NULL; 
curr_playlists -> next = NULL; 
curr_users -> user_playlist = curr_playlists; 

users *head_users,*curr_users,*p_users,*users_pointer; 
playlists *head_playlists,*curr_playlists,*p_playlists,*playlist_pointer; 
+1

あなたが遭遇する問題は何ですか? – MByD

+1

どこかでバスエラー(コアダンプ)が発生している –

+0

malloc(sizeof(users *))ではなくmalloc(sizeof(users))を記述する必要があると思います。 'sizeof(users *)'は、 'users'のサイズが必要な場合、 'users'へのポインタのサイズを意味します。 – Ivan

答えて

3

これは問題です:

p_users = (users *)malloc(sizeof(users *)); 

それはポインタだけではなく、users構造の大きさのサイズを割り当てます。

p_users = malloc(sizeof(users)); 

か:に変更し

p_users = malloc(sizeof(*p_users)); 

Casting the return value of malloc() is unnecessary and potentially dangerous.

EDIT:unitialisedを間接参照

、またはNULLは、ポインタがセグメンテーションフォールトが発生します。これは、を宣言しますが、(記載されている他の変数についても同様)curr_usersを初期化しません:

users *head_users,*curr_users,*p_users,*users_pointer; 

試みは、その後curr_usersにアクセスするために行われます

curr_users->user_playlist = curr_playlists; /* Segmentation fault. */ 

初期化curr_users有効usersのいずれかに、使用する前に構造体またはNULLに移動し、参照前にnullでないことを確認します。

users *head_users = NULL,*curr_users = NULL, 
    *p_users = NULL,*users_pointer = NULL; 

if (curr_users) 
{ 
    curr_users->user_playlist = curr_playlists; 
} 
+0

'p_users = malloc(sizeof(* p_users));を実行することは、問題を完全に解決することは言うまでもありません。 –

+0

@DanielKozar、正しく更新されました。 – hmjd

+0

私は変更を行いましたが、まだエラーが発生しました。 'curr_users - > user_playlist = curr_playlists;' –

関連する問題