Я хочу выделить массив структуры, но получаю эту ошибку с 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
- это указатель и указатель разыменования *sp
.
@ Jean-FrançoisFabre Я думаю, он хочет этого: sp = malloc(sizeof(struct productStruct) * n)
да, только что понял, что странное внутри. даже лучше: sp=malloc(sizeof(*sp)*n);
, поэтому при изменении типа malloc
остается согласованным
У вас 2 ошибки:
Используйте sp
, а не *sp
, и зарезервируйте размер структуры, а не размер указателя на структуру (если вам действительно нужен массив структур вместо указателей):
sp=malloc(sizeof(struct productStruct)*n);
Меньше ошибок: sp = malloc(sizeof *sp * n);
Честно говоря, я всегда считал sizeof struct type_t
более читабельным, поскольку ваш способ его выполнения упрощает рефакторинг из-за независимости имени типа.
просто
sp=malloc(sizeof(struct *productStruct)*n);
, не делайте ссылки, все будет в порядке