C 分配内存后不执行代码

C 分配内存后不执行代码,c,C,在我为一个结构数组分配了一些内存之后,Compile甚至不执行一个“printf”函数,为什么会发生这种情况 int main(){ setvbuf (stdout, NULL, _IONBF, 0); int entry_size; int all_ids [101] = {0}; int studentSize; int max; student* Students = readStudents ("students1.txt", &e

在我为一个结构数组分配了一些内存之后,Compile甚至不执行一个“printf”函数,为什么会发生这种情况

int main(){
    setvbuf (stdout, NULL, _IONBF, 0);
    int entry_size;
    int all_ids [101] = {0};
    int studentSize;
    int max;
    student* Students = readStudents ("students1.txt", &entry_size, all_ids, &studentSize);
    printf ("%i \n", entry_size);
    int i;
    for (i = 1; i <= entry_size; i++){
        if(all_ids[i] != 0) studentSize++;
    }
    topThreeAvg *averages = malloc(studentSize * (sizeof(topThreeAvg)));
    for (i = 1; i <= entry_size; i++){
        printf("%s %s %i %i\n", (Students + i) -> firstName, (Students + i) -> secondName, (Students + i) -> ID, (Students + i) -> grade);
    }
    max = getMaxGrade (Students, entry_size);
    printf ("Max grade is %i \n", max); 
    fillAllStudentsAvgGrades (&averages, Students, entry_size, all_ids);
    return 0;
}
intmain(){
setvbuf(标准输出,空,0);
输入大小;
int all_id[101]={0};
国际学生人数;
int max;
student*Students=readStudents(“students1.txt”和条目大小、所有ID和studentSize);
printf(“%i\n”,条目大小);
int i;
对于(i=1;i第二名,(学生+i)->ID,(学生+i)->年级);
}
max=getMaxGrade(学生、入学人数);
printf(“最大等级为%i\n”,最大值);
填写所有学生分数(平均值、学生、入学人数、所有ID);
返回0;
}

旁注::

Students[i].ID
产生的可读性比

(Students + i)->ID

编译不会运行代码——它会生成一个可执行文件,然后可以使用它来运行代码。因此,首先编译代码(并修复出现的任何错误或警告),然后运行可执行文件(并修复出现的任何运行时错误);注释掉这个,tryIt就会出现代码中的循环,如图所示,有一个off by one错误。C中的数组索引从零开始,而不是从一开始。循环使用从1开始的数组索引。因此,这两个循环的行为都是未定义的。我遵循了您的建议,但它仍然不会执行在“topThreeAvg*averages=malloc(studentSize*(sizeof(topThreeAvg));“它应该
studentSize
for循环中而不是
entrySize
”之后编写的任何内容。事实上,这不是问题,问题在于,例如,如果我编写“printf(“你好”);在“topThreeAvg*平均值=malloc(学生人数*(sizeof(topThreeAvg))”之后;“它不会在控制台中输出“hello”;
hello
之后添加
\n
printf(“hello\n”);
Students[i].ID
(Students + i)->ID