У меня есть огромные массивы вложенных структур, что делает невозможным выделение такого пространства и заставляет меня использовать кучу. Но я сталкиваюсь с трудностями, используя malloc
. Суть проблемы ниже.Массив вложенных структур
struct year_of_joining
{
struct district
{
struct colleges
{
struct departments
{
struct sections
{
struct students
{
int sex;
}student[100];
}section_no[8];
}department_no[17];
}college[153];
}dist[13];
};
Если я использую
int main()
{
int i=0;
struct year_of_joining** year;
year = malloc(100 * sizeof(struct year_of_joining));
for (i = 0; i < 100; i++)
{
year[i] = malloc(sizeof(struct year_of_joining));
}
year[1]->dist[0].college[0].department_no[0].section_no[0].student[8].sex = 1;//works fine
printf("%d", year[1]->dist[0].college[0].department_no[0].section_no[0].student[8].sex);//prints 1
free(year);
return 0;
}
Он отлично работает, но когда я создаю указатель на указатель на дист как year_of_joining и использовать оператор разыменования он не компилируется:
year[1]->dist[2]->college[0].department_no[0].section_no[0].student[8].sex = 9;//error C2039: 'dist' : is not a member of 'year_of_joining'
Как Я решаю это? Я даже на правильном пути?
Объявление 'struct' не создает вложенные структуры. Он просто объявляет кучу типов структур внутри друг друга. Объявление типа внутри 'struct' без создания именованного поля данных является незаконным в C - декларация даже не компилируется. Просьба представить более содержательную декларацию. Что такое вложенные и какие имена вложенных полей данных? – AnT
Как может 'D' иметь размер 120? Это указатель и два ints. А структуры A, B и C пусты, поэтому их размер должен быть довольно небольшим. – juanchopanza
@juanchopanza 120 - размер массива для структуры D. – solinvictus