次のプログラムに問題があります。コンパイルしようとすると、クラッシュします。私はそれが挿入機能のどこかのセグメンテーションフォールトだと思うが、私はちょうどどこにあるのか分からない。ここでC 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 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'メンバを持つと、リンクされた人のリストを表示したいように見えますが、' main() 'に' struct person'ポインタの配列を宣言しています。配列やリンクリストを作成しようとしていますか? – eddiem
構造体ポインタの配列 –