当我尝试使用指针访问结构时出错

时间:2019-02-24 23:15:20

标签: c pointers gcc data-structures segmentation-fault

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 .....

但是当我执行返回分段错误

似乎没有分配结构,或者我以不正确的方式访问了结构。

2 个答案:

答案 0 :(得分:3)

指针car3尚未设置为指向任何东西,因此其值是不确定的。然后,当您尝试读取此无效值并将其作为指针取消引用时,您将调用undefined behavior,这将导致代码崩溃。

您可以将car3指向现有的结构实例:

car3 = &car2;

在这种情况下,通过car3将为您提供确切存储在car2中的内容。或者,您可以为car3动态分配内存以指向:

car3 = malloc(sizeof *car3);

使用完free(car3)后,请确保使用它。

答案 1 :(得分:0)

您需要添加以下行:

car3 = malloc(sizeof *car3);

这会为一辆汽车分配内存。