int main()
{
int i;
struct student* a[4];
a[0]->id = 20;
a[0]->age= 22;
a[1]->id = 23;
a[1]->age= 24;
a[2]->id = 25;
a[2]->age= 26;
a[3]->id = 27;
a[3]->age= 28;
for(i=0;i<4;i++)
{
printf("%d %d \n",a[i]->id,a[i]->age);
}
return 0;
}
没有for循环,可以直接打印值,但是可以在for循环中打印 显示的输出是分段错误。
答案 0 :(得分:3)
正如Umaiki已经说过,你访问你从未分配的内存。 与他的回答相反,我提供了一种不同的方法:
首先,我们定义createDummy
:
struct
之后,我们可以typedef struct {
int id;
unsigned int age;
} student;
方法allocate the students array这样:
main
现在我们可以像student* a = malloc(4 * sizeof(student));
一样访问学生:
<index>
最后,这是一个完整的例子,说明你想要实现的目标,结合我上面显示的所有片段,包括调用free
(这是在这种情况下可以忽略不计,因为此后你会直接退出,但这是你永远不会忘记的事情):
a[<index>].id = <value>;
a[<index>].age= <value>;
答案 1 :(得分:2)
您的主要问题是您正在尝试访问未分配的内存。
从那里开始:https://www.programiz.com/c-programming/c-dynamic-memory-allocation和Using Dynamic Memory allocation for arrays。
你创建一个指针而不是初始化它,所以当你试图访问它指向的内存时,会出现一个非常常见的.RichContent is-collapsed .ContentItem-actions button {
/* Your code here */
}
...
我不知道你想做什么,但是为了纠正你的segmentation fault
,在这种情况下你必须做一个segfault
循环来初始化你的指针数组:
for