首页 > 解决方案 > 指针时无法使用箭头符号访问结构数据

问题描述

我创建了一个结构数组,但出现 BAD_ACCESS 错误。当我将所有内容切换为点表示法时,它工作正常,这是为什么呢?

结构

typedef struct data{
    int num;
}data;

主要的

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);

标签: cpointersstruct

解决方案


// 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));,所以它没有特别指出任何东西——未初始化的垃圾。尝试写入指针指向的内容会导致错误的访问错误,这并不奇怪。

在取消引用指针之前,您需要使指针实际指向某个东西。


推荐阅读