Вы выделили память для 16 enemy *
указателей, но вы не выделили пространство для самих 16 enemy
структур. Есть два способа это исправить. Одним из них является добавление цикла, который распределяет каждую из 16 enemy
структур по очереди:
int main()
{
enemy **enemies;
int i;
enemies = (enemy **) malloc(sizeof(enemy *) * 16);
for (i = 0; i < 16; ++i) {
enemies[i] = (enemy *) malloc(sizeof(enemy));
}
enemies[0]->type = 23;
printf("%i",enemies[0]->type);
return 0;
}
Другой - удалить один уровень косвенности. Если вы объявляете enemy *enemies
, вы можете выделить 16 структур сразу и отказаться от цикла. Если нет необходимости в двойном косвенном обращении, это было бы моим предпочтительным решением:
int main()
{
enemy *enemies;
enemies = (enemy *) malloc(sizeof(enemy) * 16);
enemies[0].type=23;
printf("%i",enemies[0].type);
return 0;
}
Обратите внимание, что оператор ->
переключается на .
.