struct cars {
   char  color[50];
   int maxSpeed;
   float consumption;
};


int main()
{
  struct cars car1;
  struct cars car2;
  struct cars * car3;

  //Car 1
  strcpy( car1.color, "red");
  car1.maxSpeed = 140;
  car1.consumption = 6.6;

  //Car 2
  strcpy( car2.color, "blue");
  car2.maxSpeed = 150;
  car2.consumption = 7.3;

  //Car 3
  strcpy( car3->color, "green");
  car3->maxSpeed = 145;
  car3->consumption = 7.0;

  return 0;
}

代码通常编译为:gcc-std=c99。。。。。
但是当我执行返回分段错误时
似乎没有分配结构,或者我以不正确的方式访问结构。

最佳答案

指针car3未设置为指向任何对象,因此其值不确定。然后,当您试图读取此无效值并将其作为指针取消引用时,您将调用undefined behavior,这将导致代码崩溃。
您可以将car3指向现有的结构实例:

car3 = &car2;

在这种情况下,通过car3将准确地给出存储在car2中的内容。或者您可以动态分配car3的内存以指向:
car3 = malloc(sizeof *car3);

使用完毕后,请务必free(car3)

10-06 01:57