Я создаю программу, которая будет сохранять черты лица и их классов/GPA в структуру, а затем перепечатывать все эти черты. Введенные классы/GPA являются указателями типа float. У меня возникла проблема с моей функцией free_mem, которая освободит пространство памяти. Student_t - это имя моего типа данных структуры, а * stu - указатель на первый ученик в массиве записей учащихся, а int students - входные значения общего числа студентов. Мое сообщение об ошибке гласит:Структуры и свободная функция для очистки памяти: C Программирование
error: request for member 'list_grades' in something not a structure or union
error: request for member 'list_grades' in something not a structure or union
error: request for member 'grades_list' in something not a structure or union
error: request for member 'grades_list' in something not a structure or union
Моя функция для структуры является ...
typedef struct{
int sid;
char last_name[NAME_SIZE];
char first_name[NAME_SIZE];
float *list_grades;
float gpa;
} student_t;
Моя функция для освобождения память ...
void free_mem(student_t *stu, int students){
int i;
for(i=0;i<students;i++){
free(stu.list_grades);
stu.list_grades=NULL; }
free(stu.grades_list);
stu.grades_list=NULL;
}
EDIT: Манипулирование мой свободный от stu.list_grades до stu-> list_grades и grades_list до gpa, но все еще запутался во второй части.
ошибка: несовместимый тип для аргумента 1 «свободной» Примечание: ожидаемый «недействительным *», но аргумент типа «поплавка» ошибка: несовместимые типы при назначении типа «поплавок» от типа пустот
Мои функция для освобождения памяти является ...
void free_mem(student_t *stu, int students){
int i;
for(i=0;i<students;i++){
free(stu->list_grades);
stu->list_grades=NULL; }
free(stu->gpa);
stu->gpa=NULL;
}
'stu.list_grades' ->' stu-> list_grades' – BLUEPIXY
Вы используете указатель структуры, а не структуру, поэтому вам нужно разыменовать ее. Вы можете использовать '(* stu) .list_grades', но этот синтаксис немного громоздкий, поэтому C предоставляет эквивалентную стенографию, которая является' stu-> list_grades'. –
Это не имеет смысла: 'free (stu-> gpa)'. Вы передаете 'float'' free'. Это ничем не отличается от 'free (123.456)'. Бессмысленно, правда? Вам нужно передать * указатель * на 'free', который был возвращен' malloc' или 'realloc' и т. Д. Вы не можете выборочно освободить его. Вы либо бесплатно освобождаете все, либо ничего. –