Ошибка присвоения структурной группе из несовместимого типа

Рейтинг: 0Ответов: 1Опубликовано: 04.05.2023

Я хочу выделить память для указателя типа структуры в структуре.

struct group{
    char *group_n;
    char *faculti;
};

struct student_info {

    struct group *group;
    
};
    int main(void)
{
    struct student_info *student = malloc(sizeof(struct student_info) * 2);
    for(int i = 0; i < 2; i++) {
        *(student+i)->group = malloc(sizeof(struct group));
    }
    return 0;
}

Мне выдает ошибку

error: assigning to 'struct group' from incompatible type 'void *'
                *(student+i)->group = malloc(sizeof(struct group));
                                    ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

Скажите пожалуйста с чем связана данная проблема и как её решить.

Ответы

▲ 4Принят
struct student_info *student

student — указатель на student_info.
student+i — указатель на i-й элемент массива student.
Далее в соответствии с приоритетами операций (student+i)->group представляет собой указатель на struct group.
После этого оператор разыменования * приводит к тому, что *(student+i)->group — это просто структура group.
Которой ну никак не присвоить указатель.

Это — с чем связана проблема.

Как решить?

(student+i)->group = malloc(sizeof(struct group));

или

student[i].group = malloc(sizeof(struct group));