2012-04-03 5 views
0

Ich brauche Hilfe zeigt *user_playlist zu einem Playlist-Knoten. Wie kann ich das machen?Wie man eine Struktur auf eine andere zeigt

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

Was ist das Problem, das du triffst? – MByD

+1

Ich bekomme Bus-Fehler (Core Dump) irgendwo –

+0

Ich denke, Sie müssen malloc (sizeof (Benutzer)) anstelle von malloc (sizeof (Benutzer *)) schreiben. 'sizeof (users *)' bedeutet die Größe des Zeigers auf 'Benutzer', wenn Sie die Größe von 'Benutzer' benötigen. – Ivan

Antwort

3

Dies ist ein Problem:

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

es nur die Größe eines Zeigers, nicht die Größe einer users Struktur zuordnet. Wechseln Sie zu:

p_users = malloc(sizeof(users)); 

oder:

p_users = malloc(sizeof(*p_users)); 

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

EDIT:

Dereferenzierung eine unitialised oder NULL, Zeiger wird ein Segmentierungsfehler verursachen. Dies erklärt aber nicht initialisieren nichtcurr_users (auch für andere Variablen aufgelistet):

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

Es wird versucht, dann curr_users zuzugreifen:

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

Initialise curr_users vor der Verwendung, entweder ein gültiges users Struktur oder zu NULL und überprüfen Sie vor der Deferenzierung auf nicht Null:

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

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

Nicht zu erwähnen, dass 'p_users = malloc (sizeof (* p_users));' das Problem vollständig beheben würde. –

+0

@DanielKozar, korrekt und aktualisiert. – hmjd

+0

Ich habe die Änderungen gemacht, aber immer noch einen Fehler bekommen Segmentierungsfehler bei 'curr_users -> user_playlist = curr_playlists' ' –

Verwandte Themen