我创建了一个结构体数组,但遇到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);
答案 0 :(得分:4)
// 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));
之类的操作,因此它没有特别指出-未初始化的垃圾。尝试写入指针指向的内容会导致严重的访问错误,这并不奇怪。
在取消引用指针之前,需要使指针实际指向某物。