Этот код неправильно выделяет пространство для массива.
Когда вы пытаетесь присвоить b->field[i][y]
, есть две проблемы с этим.Во-первых, это поле имеет тип int
, но вы пытаетесь присвоить ему указатель.Вот откуда приходит предупреждение.Во-вторых, field
еще нигде не указывает, поэтому field[i]
разыменовывает неинициализированный указатель.Вы не можете сделать это, пока вы сначала не назначите что-то для field
.
Что вам нужно сделать, это выделить пространство для массива int *
и назначить его для field
(первое измерение),затем для каждого члена массива выделите место для массива int
и назначьте его каждому члену (второе измерение):
int i;
b->field = malloc(b->size * sizeof(*b->field));
if (!b->field) {
perror("malloc failed");
exit(1);
}
for (i=0; i<b->size; i++) {
b->field[i] = malloc(b->size * sizeof(**b->field));
if (!b->field[i]) {
perror("malloc failed");
exit(1);
}
}