对于编程任务,我应该创建一个模型学生数据库。要初始化数据库,我们必须编写一个函数InitDB
来分配所有内存等。这是我到目前为止所写的内容InitDB
:(包括这些struct
东西,main()
以防万一)
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;
}
当我运行程序时,它冻结在InitDB
, (scanf
行)的第 3 行。scanf
当我说冻结时,我的意思是如果我将第二个参数设为非指针变量,它会执行与命令提示符相同的操作。但&(example->numStudents)
应该已经是一个指针......对吧?所以我没有想法。为什么会这样,我该如何解决?
另外,我不太确定我malloc
是否正确设置了语句,但由于后一个问题,我还没有真正看到它是否有效。我在正确的轨道上......还是什么?