// This does not work
data *data[4];
data[0]->num = 10;
printf("Number is = %d\n", data[0]->num);
Поскольку data
является массивом из четырех указателей, data[0]
является первым из этих четырех указателей. Но на что это указывает? Поскольку вы не сделали что-то вроде data[0] = malloc(sizeof(struct data));
, это ни на что не указывает конкретно - неинициализированный мусор. Неудивительно, что попытка записи на то, на что указывает указатель, вызывает ошибку неверного доступа.
Прежде чем разыменовать указатель, вам нужно сделать так, чтобы указатель действительно указывал на что-то.