二重ポインタを使いたいのですがうまくいきません。
成績を表示するプログラムを書いているのですが
#ifndef __Seiseki__h #define __Seiseki__h #include <stdio.h> #include <stdlib.h> // データ型宣言 typedef struct { const char* name; int kokugo; int sansuu; int rika; int shakai; } Seiseki; // プロトタイプ宣言 Seiseki * makeSeiseki(const char*, int, int, int, int); void print(Seiseki*); void free(Seiseki*); #endif // __Seiseki__h
#include "Seiseki.h" // 成績の生成(コンストラクタ) Seiseki * makeSeiseki(const char* n, int k, int m, int r, int h) { Seiseki * s = (Seiseki*)malloc(sizeof(Seiseki)); s->name = n; s->kokugo = k; s->sansuu = m; s->rika = r; s->shakai = h; return s; } // 成績の表示 void print(Seiseki * s) { printf(" % s 国 % d 算 % d 理 % d 社 % d \n", s->name, s->kokugo, s->sansuu, s->rika, s->shakai); } // 成績の解放 void free(Seiseki * s) { free((void*)s); }
#include "Seiseki.h" int main() { Seiseki **s; s = (Seiseki**)malloc(3*sizeof(Seiseki*) ); s[0] = makeSeiseki("山田太郎", 78, 55, 80, 88); s[1] = makeSeiseki("佐藤花子", 90, 80, 85, 87); s[2] = makeSeiseki("中村裕次郎", 40, 62, 72, 21); for (int i = 0;i < 3;i++) print(s[i]); for (int i = 0;i < 3;i++) free(s[i]); free(s); }
3つ目のソースコードを
#include "Seiseki.h" int main() { Seiseki *s[3]; s[0] = makeSeiseki("山田太郎", 78, 55, 80, 88); s[1] = makeSeiseki("佐藤花子", 90, 80, 85, 87); s[2] = makeSeiseki("中村裕次郎", 40, 62, 72, 21); for (int i = 0;i < 3;i++) print(s[i]); for (int i = 0;i < 3;i++) free(s[i]); }
から二重ポインタを使うように変えてみたのですがエラーはなくビルドが失敗となります。
3つ目のソースコードのどこを修正すればよいでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。