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)
。