このプログラムは、コードの先頭にハードコードされた名前と年齢の配列から名前と年齢の値を含む構造体配列を作成することになっています。 私は、main関数で配列を宣言してから、insert関数内でその配列にメモリを割り当てるよう求められました。プログラムは罰金コンパイルし、私が取得することになってるの出力は次のようになります。C - 出力にヌル値とセグメンテーションフォールトが含まれています
名:サイモン
年齢:22
名前:スージー
年齢:24
名:アルフレッド
年齢:106
名:チップ
年齢:6
などなど
私が手出力は次のようなものですが:
名:サイモン
年齢:22
名:( null)
年齢:33
名前:スージー
年齢:24
名:(ヌル)
年齢:33
名前:スージー
年齢:24
... .. セグメンテーションフォールトが発生しました。
名前の一部が2回表示され、名前の一部がヌルであり、出力の最後にセグメンテーション違反があります。 ご協力いただければ幸いです。どうもありがとう。あなたのコードで
#include <stdio.h>
#include <stdlib.h>
/* these arrays are just used to give the parameters to 'insert',
to create the 'people' array
*/
#define HOW_MANY 7
char *names[HOW_MANY]= {"Simon", "Suzie", "Alfred", "Chip", "John", "Tim",
"Harriet"};
int ages[HOW_MANY]= {22, 24, 106, 6, 18, 32, 24};
/* declare your struct for a person here */
struct person {
char *name;
int age;
};
static void insert(struct person **arr, char *name, int age)
{
//initialise nextfreeplace
static int nextfreeplace = 0;
//allocate memory
arr[nextfreeplace] = malloc (sizeof(struct person));
/* put name and age into the next free place in the array parameter here */
arr[nextfreeplace]->name = name;
arr[nextfreeplace]->age = age;
/* modify nextfreeplace here */
nextfreeplace++;
}
int main(int argc, char **argv)
{
/* declare the people array here */
struct person *people;
for (int i = 0; i < HOW_MANY; i++)
{
insert (&people, names[i], ages[i]);
}
/* print the people array here*/
for (int i = 0; i < HOW_MANY; i++)
{
printf("Name: %s \t Age: %i \n", people[i].name, people[i].age);
}
return 0;
}
[よくある質問はどうすればよいですか?](https://stackoverflow.com/help/how-to-ask)と[最小限の完全かつ検証可能な例を作成する方法](https:///stackoverflow.com/help/mcve)。 – Rabbid76
コードの画像を投稿せず、コード自体を投稿してください。 –
あなたはどの出力を期待していますか? – alk