Причиной этой ошибки является то, что вы используете новый тип, который вы определяете, когда он еще не определен, после присвоения имени определяется новый тип.
- Возможно ли этосохранить информацию в указателе структуры?
Да, когда вы выделяете память для структуры, вы выделяете память для всех ее полей в куче, если одно из этих полей является указателем,Вы выделяете память для переменной, которая содержит адрес памяти.Но вы все еще не выделили память для этого адреса.Кроме того, не забывайте, что когда вы освобождаете такую структуру, вам необходимо сначала освободить всю память, на которую могут указывать ее поля, а затем освободить саму структуру.
- Если, то какмне сделать это в моем коде?
Прежде всего нам нужно исправить структуру и затем выделить память для указателя, обратите внимание, что я определил Contact как указатель на struct contact_t
:
typedef struct contact_t{
char Name[20];
struct contact_t *Spouse;
} *Contact;
с использованием структуры:
Contact contact_00 = malloc(sizeof(*contact_00));
//check malloc result
contact_00->Spouse = malloc(sizeof(*contact_00->Spouse));
//check malloc result
//your code
free(contact_00->Spouse);
free(contact_00);
Обратите внимание, что приведение void*
(возвращаемое значение malloc) к другим указателям бессмысленно.