「mcguffins」と呼ばれる構造体の配列を作成していますが、非常に奇妙なエラーが発生します。
//prints the info in a mcguffin
void printInfo(int i,struct mcguffin * new) {
printf("%d \tNum: %d\t Word: %s\n", i, new->num, new->word);
}
//creates a new mcguffin
struct mcguffin * addMG(int n, char * w) {
printf("Expected output:\n\tNum: %d\tWord: %s\n", n, w);
struct mcguffin * new;
new = malloc(sizeof *new);
new->num = n;
strncpy(new->word, w, sizeof(char[20]));
printf("Actual output: \n\t");
printInfo(1, new);
return new;
}
//creates a list of mcguffin pointers, and sets these pointers to new mcguffins
struct mcguffin ** writeList() {
struct mcguffin ** list = malloc(10 * sizeof(*list));
list[0] = addMG(2, "Jeter");
list[1] = addMG(14, "Granderson");
list[2] = addMG(25, "Teixeira");
list[3] = addMG(13, "Rodriguez");
list[4] = addMG(24, "Cano");
list[5] = addMG(33, "Swisher");
list[6] = addMG(55, "Martin");
list[7] = addMG(20, "Posada");
list[8] = addMG(11, "Gardner");
list[9] = addMG(42, "Mo");
return list;
}
何らかの理由で、list[0]とlist[1]は作成された構造体に割り当てられていませんが、list[2]からlist[9]は割り当てられています。addMGは正常に動作し、list[0]とlist[1]の構造体を作成しますが、何らかの理由でそれらにprintInfoを使用しようとすると、構造体に情報を出力する代わりに、メモリアドレスを出力します。 > numは移動し、new->wordに対して何も出力しません。
0 Num: 30519472 Word:
1 Num: 30519600 Word:
2 Num: 25 Word: Teixeira
3 Num: 13 Word: Rodriguez
4 Num: 24 Word: Cano
5 Num: 33 Word: Swisher
6 Num: 55 Word: Martin
7 Num: 20 Word: Posada
8 Num: 11 Word: Gardner
9 Num: 42 Word: Mo
私はCを初めて使用するため、これはおそらくいくつかのばかげたエラーですが、助けていただければ幸いです。
編集:明確にするために、マクガフィンは次のように別のヘッダーファイルで宣言されています:
struct mcguffin {
int num;
char word[20];
};