Будет ли это маллок второй структурой? - PullRequest
2 голосов
/ 02 апреля 2012

Будет ли p = (users *)malloc(sizeof(users)); создавать память для структуры списка воспроизведения? Также, как я могу ссылаться на playlist.album, используя p?

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

struct users_ {
  int user_ID;
  struct playlist_ playlist;
  struct users_ *next;
};

typedef struct playlist_  playlists;
typedef struct users_ users;

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

Ответы [ 2 ]

5 голосов
/ 03 апреля 2012

Будет ли p = (users *)malloc(sizeof(users)); создавать память для структуры списка воспроизведения?

playlist является членом users_, поэтому он является частью выделенного пространства. Итак, чтобы ответить на ваш вопрос: да.

[Между прочим, вам не нужно (и не нужно) разыгрывать результат malloc.]

Также, как я могу ссылаться на playlist.album, используя p?

Зависит от того, что вы подразумеваете под «ссылкой». Предполагая, что вы просто имеете в виду «доступ», тогда это:

p->playlist.album
0 голосов
/ 03 апреля 2012

Да, будет.struct users_ содержит экземпляр из struct playlist_, поэтому выделение памяти для первого также зарезервирует место для второго.

С другой стороны, если бы struct users_ содержал указатель от до struct playlist_, вам пришлось бы выделять память для последнего после выделения памяти для первого.

Для справки playlist.album используйте p->playlist.album

...