C malloc结构实现

C malloc结构实现,c,pointers,struct,malloc,C,Pointers,Struct,Malloc,我对以下程序有问题。当我试图编译它时,它崩溃了。我猜这是插入函数中的某个分段错误,但我就是不知道在哪里 char *names[HOW_MANY]= {"Simon", "Suzie", "Alfred", "Chip", "John", "Tim", "Harriet"}; int ages[HOW_MANY]= {22, 24, 106, 6, 18, 32, 24}; struct person { char name[40]; unsigned int a

我对以下程序有问题。当我试图编译它时,它崩溃了。我猜这是插入函数中的某个分段错误,但我就是不知道在哪里

char *names[HOW_MANY]= {"Simon", "Suzie", "Alfred", "Chip", "John", "Tim",
          "Harriet"};
int ages[HOW_MANY]= {22, 24, 106, 6, 18, 32, 24};

struct person 
{
  char name[40];
  unsigned int age;
  struct person *next;
};

struct person* insert(struct person *people[], char *name, int age) 
{
  struct person *ptr;
  ptr=(struct person * )malloc(sizeof(struct person));
  if(ptr==NULL)
  {
    printf("error");
    return;
  }
  //ptr=ptr->next;
  strcpy(ptr->name,name);
  ptr->age = age;
  ptr->next=NULL;

}

int main() 
{
  struct person *people[HOW_MANY];
  for (int i =0; i<HOW_MANY;i++) 
      insert (people, names[i], ages[i]);

  for(int i=0;i<HOW_MANY;i++)
    printf("%s %d\n", people[i]->name, people[i]->age);
  return 0;
}
char*姓名[人数]={“西蒙”、“苏西”、“阿尔弗雷德”、“奇普”、“约翰”、“蒂姆”,
“哈丽特”};
整数[多少]={22,24,106,6,18,32,24};
结构人
{
字符名[40];
无符号整数;
结构人*next;
};
结构人*插入(结构人*人[],字符*姓名,整数年龄)
{
结构人*ptr;
ptr=(结构人*)malloc(结构人大小);
如果(ptr==NULL)
{
printf(“错误”);
回来
}
//ptr=ptr->next;
strcpy(ptr->name,name);
ptr->age=年龄;
ptr->next=NULL;
}
int main()
{
结构人*人[有多少人];
对于(int i=0;iage);
返回0;
}

这里有一个小改动,可以让您继续前进:

void insert(struct person **person_ptr, char *name, int age) 
{                      /* ^^^^^^^^^^^^ one person */
  struct person *ptr;
  ...
  ptr->next=NULL;
  *person_ptr = ptr;   /* send _ptr_ back to the calling code. */
}

int main() 
{
  struct person *people[HOW_MANY];
  for (int i =0; i<HOW_MANY;i++) 
      insert (&people[i], names[i], ages[i]);
           /* ^      ^^^ Just pass the one person you're interested in */
  ...
}
void插入(结构人员**人员,字符*名称,整数年龄)
{/*^^^^^^^^^^^^^一人*/
结构人*ptr;
...
ptr->next=NULL;
*person_ptr=ptr;/*将_ptr_u发送回呼叫代码*/
}
int main()
{
结构人*人[有多少人];

对于(int i=0;我让你用调试器单步执行代码?这应该会告诉你哪一行出现故障。我注意到
insert
从未实际将
ptr
放入
people
数组,我猜这是根本问题。你的代码中有相互冲突的目标。有
next
成员会让它出现您希望有一个人员的链接列表,但您正在
main()
中声明一个
struct person
指针数组。您是否试图构造一个数组或人员的链接列表?struct person指针数组如果您想处理
insert()中的数组
函数,然后需要传递要修改的人的索引,例如
i
循环计数器变量,并将
people[i]
设置为与分配的
person
对象相等。您得到了哪些编译器警告?您将函数定义为
struct person*insert(…)…
,但实际上并没有返回值-只是从函数的底部掉了下来。
return(ptr);
会容易得多。@AndrewHenle同意。我试图尽可能地坚持OP的逻辑,因此
**
@cxw函数应该返回一个值,或者声明为
void
returntype@M.M完成!(填充物达到最小长度)