c-为什么我在尝试使用指针访问结构时会出现这个分段错误



我正在尝试学习嵌套结构。当我使用结构变量访问它时,它工作得很好。但当我尝试使用指针访问它时,它会显示分段错误。

#include <stdio.h>
#include <stdlib.h>
struct Vehicle {
int eng;
int weight;
};
struct Driver {
int id;
float rating;
struct Vehicle v;
};
void main() {
struct Driver *d1;
d1->id = 123456;
d1->rating = 4.9;
d1->v.eng = 456789;
printf("%dn", d1->id);
printf("%fn", d1->rating);
printf("%dn", d1->v.eng);
}

必须先初始化指向有效缓冲区地址的指针,然后才能取消引用该地址。

例如:

void main(){
struct Driver d; /* add this */
struct Driver *d1;
d1 = &d; /* add this */

此外,我建议您在托管环境中使用标准的int main(void),而不是void main(),这在C89和C99或更高版本中定义的实现中是非法的,除非您有特殊原因使用非标准签名。

在访问指针指向的内容之前,需要初始化指针

struct Driver data;
struct Driver *d1 = &data;
d1->id=123456;
d1->rating=4.9;
d1->v.eng=456789;
printf("%dn",d1->id);
printf("%fn",d1->rating);
printf("%dn",d1->v.eng);

注意data的添加,以及指向它的d1的初始化。运行时,它会产生:

123456
4.900000
456789

初始化它的另一种方法是通过malloc使用动态分配的内存,在这种情况下,您稍后将释放分配的内存。

您使用的指针d1没有初始化。

您需要首先初始化它,例如使用malloc:

struct Driver *d1 = malloc(sizeof(struct Driver));
if(NULL == d1)
{
perror("can't allocate memory");
exit(1);
}
// ... using d1
free(d1);
return 0;

相关内容

  • 没有找到相关文章

最新更新