Назначение - создать массив структур с 10 элементами в качестве «учеников», каждый из которых имеет оценку и идентификатор. Есть некоторые вещи, которые мне не разрешают изменять в коде (например, что-либо в основном).C свободная память из массива struct
#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]);
}
Так это нормально компилируется и остальная часть кода работает нормально, но затем дампы, когда он попадает в свободный(). Кроме того, это главное, что дал мне мой профессор и сказал, чтобы я не изменился. Не было никакого вызова функции deallocate, так что теперь мне интересно, будет ли она автоматически вызвана, когда основной будет сделан, или если он оставит ее по ошибке. Я добавил его, потому что думаю, что это кажется разумным.
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;
}
Я использую gcc. –
Каков ваш вопрос? – Hypino
Сколько звонков на 'malloc()' есть? Сколько звонков на 'free()'? Почему число разное? Как вы можете перестать быть другим? Для каждого вызова 'malloc()' должен быть один 'free()'. (Если вы используете 'realloc()', он может бросить гаечный ключ в подсчете - он может выделять, перераспределять _or_ свободную память, но концепция применяется.) –