У меня возникла проблема со следующей программой. Когда я пытаюсь скомпилировать его, он падает. Я предполагаю, что это ошибка сегментации где-то в функции вставки, но я просто не могу понять, где.C реализация malloc struct
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;
}
Вы выполнили одноэтапный код с помощью отладчика? Это должно сказать вам, какая строка имеет сбой. Я отмечаю, что 'insert' никогда не помещает' ptr' в массив 'people', который, как я предполагаю, является основной проблемой. – cxw
У вас конфликтующие цели в коде. Наличие члена 'next' означает, что вы хотите иметь связанный список людей, но вы объявляете массив указателей' struct person' в 'main()'. Вы пытаетесь построить массив или связанный список людей? – eddiem
массив указателей struct person –