Ich erstelle ein Programm, das Eigenschaften einer Person und ihre Grade/GPA in einer Struktur speichert, und dann alle diese Merkmale neu drucken. Die eingegebenen Grade/GPA sind Zeiger des Gleitkommatyps. Ich habe Probleme mit meiner free_mem-Funktion, die den Speicherplatz freigibt. Student_t ist der Name meines Strukturdatentyps und * stu ist ein Zeiger auf den ersten Schüler in einem Array von Schülerakten, und int Schüler ist ein Eingabewert der Gesamtzahl der Schüler. Meine Fehlermeldung lautet:Strukturen und freie Funktion, um Speicher zu löschen: C Programmierung
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
Meine Funktion für die Struktur ist ...
typedef struct{
int sid;
char last_name[NAME_SIZE];
char first_name[NAME_SIZE];
float *list_grades;
float gpa;
} student_t;
Meine Funktion für die Freigabe der Speicher ...
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: Manipulierte meine freie Funktion von stu.list_grades zu stu-> list_grades und grains_list zu gpa, aber immer noch verwirrt im zweiten Teil.
Fehler: inkompatible Typ für Argument 1 von ‚freien‘ note: erwartet ‚void *‘ aber Argument ist vom Typ ‚float‘ Fehler: inkompatible Typen bei der Zuordnung des Typs ‚schweben‘ von Typ void
Mein Funktion für die Speicherfreigabe ist ...
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
Sie verwenden einen Strukturzeiger, keine Struktur, daher müssen Sie ihn dereferenzieren. Sie können '(* stu) .list_grades' verwenden, aber diese Syntax ist ein wenig umständlich, daher stellt C eine äquivalente Kurzschrift zur Verfügung, die' stu-> list_grades 'ist. –
Das ergibt keinen Sinn: 'free (stu-> gpa)'. Du gibst einen 'float' nach' free'. Es ist nicht anders als 'free (123.456)'. Bedeutungslos, oder? Sie müssen einen * Zeiger * an "frei" übergeben, einen, der von 'malloc' oder' realloc' zurückgegeben wurde. Sie können ein Teil davon nicht selektiv freigeben. Entweder Sie befreien das Ganze oder gar nichts. –