プログラミングの課題のために、モデルの学生データベースを作成することになっています。データベースを初期化するには、InitDBすべてのメモリなどを割り当てる関数を作成する必要があります。これまでに書いたものは次のとおりですInitDB。structmain()
typedef struct {
double mathGrade;
} stuDB;
typedef struct {
int numStudents;
stuDB students[MaxStudents];
} classDB;
main(){
int avGrade;
classDB *example;
InitDB(example);
//printf("Average class grade is %d\n",AvGrade(example)); <----ignore
getchar();
}
void InitDB(classDB *example){
int i=-1,numS;
printf("How many students?");
scanf("%d",&(example->numStudents);
stuDB *pstudents[numS]; //array of pointers to each student rec of type stuDB
do {
pstudents[i] = (stuDB *)malloc(sizeof(stuDB));
if(pstudents[i]==NULL) break;
i++;
} while(i<numS);
pstudents[0]->mathGrade = 42; //just for testing
pstudents[1]->mathGrade = 110;
}
プログラムを実行すると、 の 3 行目InitDB(scanf行) でフリーズします。フリーズと言うときはscanf、ポインター変数ではない 2 番目の引数を作成した場合に、コマンド プロンプトが行うのと同じことを意味します。しかし、&(example->numStudents)すでにポインターである必要があります...そうですか?だから私はアイデアがありません。なぜこれを行うのですか?どうすれば修正できますか?
mallocまた、ステートメントを正しく設定したかどうかはよくわかりませんが、後者の問題のために機能するかどうかを実際に確認することはできませんでした. 私はそれで正しい軌道に乗っていますか...または何ですか?