Разыменование указателя на неполный тип - typedef struct

Я ищу ошибку в своем коде (в C) и ничего не нахожу. Я просмотрел много блогов и перепробовал много советов, но ничего не помогло.
Я закодировал это:

typedef struct Account_t *Account;
struct Account_t {
     Customer customer;
     Realtor realtor;
     Offer offer;
};

в то время как Риэлтор, Клиент и Предложение четко определены и включены в файл.h. Я получаю сообщение об ошибке "разыменование указателя на неполный тип" struct Account_t "", когда я пишу:

 Account account = malloc(sizeof(*account));

Пожалуйста, помогите мне найти проблему!

3 ответа

Решение

Я бы сказал, что вы должны сделать что-то вроде этого:

Account account = (Account) malloc (sizeof (* account));

Я опробовал твой код. И у меня была такая же проблема, как и у вас.

Проблема в вашем коде: когда вы размещаете структуру в куче, возвращаемое значение присваивается неправильно, потому что malloc возвращает указатель.

мой код выглядит так:

Account* account = (account*)malloc(sizeof(account));

И второе: как определение типа я не определяю структуру как указатель.

typedef struct account_t Account;

Попробуйте это, я надеюсь, что эта информация полезна!

typedef struct Account_t *Account;
struct Account_t {
     Customer customer;
     Realtor realtor;
     Offer offer;
};

Первая строка определена Account быть указателем наstruct Account_t, Однако в этот момент struct Account_t не определено

Вы должны сначала определить structа затем typedef,

struct Account_t {
     Customer customer;
     Realtor realtor;
     Offer offer;
};
typedef struct Account_t *Account;

Теперь вы можете счастливо использовать Account,

Другие вопросы по тегам