2012-04-03 59 views
0

我需要幫助將*user_playlist指向播放列表節點。我怎樣才能做到這一點?如何將一個結構指向另一個

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 2012-04-03 11:29:04

+1

我得到總線錯誤(核心轉儲) – 2012-04-03 11:31:40

+0

我認爲你需要寫malloc(sizeof(users))而不是malloc(sizeof(users *))。 'sizeof(users *)'表示當你需要'users'的大小時指向'users'的指針的大小。 – Ivan 2012-04-03 11:33:23

回答

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.

編輯:

解引用一個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並在出廠前檢查非空:

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))''會完全解決問題。 – 2012-04-03 11:36:13

+0

@DanielKozar,正確和更新。 – hmjd 2012-04-03 11:37:45

+0

我做了更改,但仍在'curr_users - > user_playlist = curr_playlists;' – 2012-04-03 11:54:00

相關問題