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
尚未设置为指向任何内容,因此其值不确定。 然后,当您尝试读取此无效值并将其取消引用为指针时,您将调用未定义的行为,在这种情况下会导致代码崩溃。
您可以将car3
指向现有结构实例:
car3 = &car2;
在这种情况下,通过car3
将为您提供确切的内容 存储在car2
. 或者,您可以动态分配内存,以便car3
指向:
car3 = malloc(sizeof *car3);
然后,请务必在完成使用后free(car3)
。
您需要添加以下行:
car3 = malloc(sizeof *car3);
这将为一个汽车实例分配内存。