ある構造内のポインターを別の構造のノードに向けようとしています。私は今この10時間で立ち往生しています。誰かが自分のコードを修正するのを手助けできますか? curr_users -> playlist = p_playlists;
にセグメンテーションフォルトが発生しています。それを間違って指摘していますか?リンクリストを別のリンクリストにポインター
struct playlist_ {
int album;
int track_num;
struct playlist_ *next;
};
typedef struct playlist_ playlists;
struct users_ {
int user_ID;
struct playlist_ *playlist;
struct users_ *next;
};
typedef struct users_ users;
int transaction(FILE *transaction_file,album *all_album){
int transaction_id,i;
int album_ID,
account_number,
add_playlist_user,
add_playlist_album,
add_playlist_track;
users *head_users,*curr_users,*p_users,*users_pointer;
playlists *head_playlists,*curr_playlists,*p_playlists,*playlist_pointer;
head_users = NULL;
fscanf(transaction_file,"%d\n",&account_number);
/*Checks for empty list, if true creates the first user*/
if(!(head_users)){
p_users = malloc(sizeof(users));
p_users -> user_ID = account_number;
head_users = p_users;
head_users -> next = NULL;
users_pointer = head_users;
/*If list is not empty create new user and puts it in front of list*/
}else{
p_users = malloc(sizeof(users));
p_users -> user_ID = account_number;
curr_users = p_users;
curr_users -> next = head_users;
head_users = curr_users;
users_pointer = head_users;
}
/*Create an empty playlist for user and set everything to null*/
p_playlists = malloc(sizeof(playlists *));
curr_playlists = p_playlists;
curr_playlists -> album = 5;
curr_playlists -> track_num = 5;
curr_playlists -> next = NULL;
curr_users -> playlist = p_playlists;
エラーメッセージが受信、私はこのコードを実行すると:
エラーは、この行であるように思わProgram received signal SIGSEGV, Segmentation fault.
0x00011050 in transaction (transaction_file=0xff3675cc, all_album=0x226b0)
at functions.c:94
94 curr_users -> playlist = p_playlists;
サイドノート:以下のような構造体を定義することができます: 'typedef struct users_ {/ * whatever * /} users;'定義とtypedefの両方を一つのステートメントで行います。さらに、 'struct user'と' users'は2つの異なるものですから、 'typedef struct users {/ * * /} users; 'というアンダースコアを削除することもできます。さらに、struct nameを削除することもできます: 'typedef struct {/ * * /} users;'私はこの最後のものをお勧めしません。 – Shahbaz
チップをありがとう。 –