如何解决为什么尝试使用指针访问结构时出现此分段错误?
我正在尝试学习嵌套结构。当我使用结构变量访问它时,它可以正常工作。 但是,当我尝试使用指针访问它时,它显示了分段错误。
#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("%d\n",d1->id);
printf("%f\n",d1->rating);
printf("%d\n",d1->v.eng);
}
解决方法
在取消引用之前,必须初始化指向有效缓冲区地址的指针。
例如:
void main(){
struct Driver d; /* add this */
struct Driver *d1;
d1 = &d; /* add this */
我还建议您在托管环境中使用标准int main(void)
而不是void main()
,这在C89中是非法的,并且在C99或更高版本中是实现定义的,除非您出于特殊原因使用非标准签名。
您使用了指针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;
,
您需要先初始化指针,然后才能访问它所指向的内容。这是修复它的一种方法:
struct Driver data;
struct Driver *d1 = &data;
d1->id=123456;
d1->rating=4.9;
d1->v.eng=456789;
printf("%d\n",d1->id);
printf("%f\n",d1->rating);
printf("%d\n",d1->v.eng);
请注意添加了data
,并初始化了d1
指向它。运行时会产生:
123456
4.900000
456789
另一种初始化方法是通过malloc
使用动态分配的内存,在这种情况下,稍后您将释放分配的内存。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。