赋值是创建一个包含10个元素作为“学生”的结构数组,每个元素都有一个分数和一个ID。有些事情我不允许在代码中改变(就像在main中的任何东西)。
#include <stdio.h>
#include <stdlib.h>
struct student* allocate(){
struct student* array = malloc(10 * sizeof(struct student));
return array;
}
void deallocate(struct student* stud){
int i = 0;
for(;i<10;i++)
free(&stud[i]);
}
所以这个编译得很好,其余的代码运行正常但是当它到达free()时核心转储。而且,这是我教授给我的主要内容,并告诉我不要改变。没有调用deallocate函数,所以现在我想知道它是否在main完成后自动被调用,或者是否错误地将它遗漏了。我加入了因为我认为这似乎是合理的。
int main(){
struct student* stud = allocate();
generate(stud);
output(stud);
sort(stud);
for(int i=0;i<10;i++){
printf("%d %d\n", stud[i].id,stud[i].score);
}
printf("Avg: %f \n", avg(stud));
printf("Min: %d \n", min(stud));
deallocate(stud);
return 0;
}
答案 0 :(得分:4)
您{10}个数组作为1个连续的内存块并{1}}调用(m)allocated
。这是正确的。
要释放此项,您只需在第一个数组元素上使用malloc
一次。这释放了整个连续的内存块,这是整个10学生阵列。
答案 1 :(得分:1)
void deallocate(struct student* stud){
free(stud);
}