为什么我为以下程序获得分段错误?

时间:2018-04-12 16:05:33

标签: c pointers

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循环中打印   显示的输出是分段错误。

2 个答案:

答案 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-allocationUsing Dynamic Memory allocation for arrays

你创建一个指针而不是初始化它,所以当你试图访问它指向的内存时,会出现一个非常常见的.RichContent is-collapsed .ContentItem-actions button { /* Your code here */ } ...

我不知道你想做什么,但是为了纠正你的segmentation fault,在这种情况下你必须做一个segfault循环来初始化你的指针数组:

for