Это проблема:
p_users = (users *)malloc(sizeof(users *));
он только распределяет размер указателя, а не размер users
структуры. Изменить на:
p_users = malloc(sizeof(users));
или
p_users = malloc(sizeof(*p_users));
Приведение возвращаемого значения malloc()
не является необходимым и потенциально опасным.
EDIT:
Разыменование указателя, унифицированного или 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;
}