Структуры внутри связанных списков в C - PullRequest
1 голос
/ 31 августа 2011

Я изучаю, как реализовать связанные списки в C. Я понимаю основы обычных связанных списков, как добавлять значения, как их распечатывать и т. Д., Но мне было интересно - возможно ли добавить другую структуру как значение в связанном списке? Я имею в виду:

typedef struct personal_info {
  char *name;
  char *surname;
  int phone_number;
} Info;

typedef struct llist {
  Info *info;
  struct llist *next;
} List;

И когда я делаю это, как мне получить доступ к значениям структуры Info?

List *l;
l = malloc(sizeof(List));

l->info->name = 'name';
l->info->surname = 'surname';
l->info->phone_number = 1234567890;

Код падает, поэтому я определенно что-то делаю не так. Не могли бы вы дать мне несколько советов, как этого добиться?

Ответы [ 2 ]

3 голосов
/ 31 августа 2011
List *l;
l = malloc(sizeof(List));
l->info = malloc(sizeof(Info));

Вы также должны распределить память для структуры

Также помните, что если вы реализуете какие-либо функции, которые удаляют узлы из списка, вам нужно освободить эту структуру, прежде чем освободить узел.

3 голосов
/ 31 августа 2011

Вам также необходимо выделить память для информационной структуры:

l = malloc(sizeof(List));
l->info = malloc(sizeof(Info));

l->info->name = "name";
l->info->surname = "surname";
l->info->phone_number = 1234567890;
...