Невозможно получить доступ к данным структуры, используя обозначение стрелки, когда указатель - PullRequest
0 голосов
/ 10 ноября 2018

Я создал массив структур и получаю ошибку BAD_ACCESS. Когда я переключаю все в точечную нотацию, все работает нормально, почему это так?

Struct

typedef struct data{
    int num;
}data;

Main

int main(void){
  // This works
  data data[4];
  data[0].num = 10;
  printf("Number is = %d\n", data[0].num);

  // This does not work
  data *data[4];
  data[0]->num = 10;
  printf("Number is = %d\n", data[0]->num);

1 Ответ

0 голосов
/ 10 ноября 2018
// 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));, это ни на что не указывает конкретно - неинициализированный мусор. Неудивительно, что попытка записи на то, на что указывает указатель, вызывает ошибку неверного доступа.

Прежде чем разыменовать указатель, вам нужно сделать так, чтобы указатель действительно указывал на что-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...