Как я могу выделить массив структуры с помощью malloc () в c?

Я хочу выделить массив структуры, но получаю эту ошибку с GCC:

st.c: In function ‘main’:
st.c:20:4: error: incompatible types when assigning to type ‘struct employeeStruct’ from type ‘void *’ *sp=malloc(sizeof(struct productStruct)*n);

А это моя структура и указатель:

struct productStruct
{
        unsigned int ID;
        unsigned long int serialnumber;
        char name[40];
};

struct productStruct *sp;

И после получения переменной n от пользователя в основной функции: (Я получаю ошибку для этой строки)

*sp=malloc(sizeof(struct *productStruct)*n);

Не знаю, может быть, это ошибка приведения типов, но я не мог ее исправить. Спасибо за внимание

просто sp=malloc(sizeof(struct *productStruct)*n);, не делайте ссылки, все будет в порядке

Jean-François Fabre 11.04.2018 13:38
sp - это указатель и указатель разыменования *sp.
Kami Kaze 11.04.2018 13:40

@ Jean-FrançoisFabre Я думаю, он хочет этого: sp = malloc(sizeof(struct productStruct) * n)

Jabberwocky 11.04.2018 13:45

да, только что понял, что странное внутри. даже лучше: sp=malloc(sizeof(*sp)*n);, поэтому при изменении типа malloc остается согласованным

Jean-François Fabre 11.04.2018 13:45
2
4
128
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас 2 ошибки:

Используйте sp, а не *sp, и зарезервируйте размер структуры, а не размер указателя на структуру (если вам действительно нужен массив структур вместо указателей):

sp=malloc(sizeof(struct productStruct)*n);

Меньше ошибок: sp = malloc(sizeof *sp * n);

ad absurdum 11.04.2018 13:53

Честно говоря, я всегда считал sizeof struct type_t более читабельным, поскольку ваш способ его выполнения упрощает рефакторинг из-за независимости имени типа.

vmt 11.04.2018 15:04

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