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 .....
但是当我执行返回分段错误
似乎没有分配结构,或者我以不正确的方式访问了结构。
答案 0 :(得分:3)
指针car3
尚未设置为指向任何东西,因此其值是不确定的。然后,当您尝试读取此无效值并将其作为指针取消引用时,您将调用undefined behavior,这将导致代码崩溃。
您可以将car3
指向现有的结构实例:
car3 = &car2;
在这种情况下,通过car3
将为您提供确切存储在car2
中的内容。或者,您可以为car3
动态分配内存以指向:
car3 = malloc(sizeof *car3);
使用完free(car3)
后,请确保使用它。
答案 1 :(得分:0)
您需要添加以下行:
car3 = malloc(sizeof *car3);
这会为一辆汽车分配内存。