我正在创建一个程序,将一个人的特征及其成绩/ GPA存储到一个结构中,然后重新打印所有这些特征。输入的等级/ GPA是浮点类型的指针。我的free_mem函数有问题,该函数将释放内存空间。 Student_t是我的struct数据类型的名称,* stu是指向学生记录数组中第一个学生的指针,而int students是学生总数的输入值。我的错误消息显示为:

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;
}


编辑:从stu.list_grades到stu-> list_grades和grades_list到gpa操纵了我的自由函数,但第二部分仍然感到困惑。

错误:“自由”参数1的类型不兼容注意:应为“ void *”,但参数类型为“ float”
错误:从类型void分配类型“ float”时,类型不兼容

我释放内存的功能是...

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;
}

最佳答案

当您尝试在for循环中使用free()时,就会发生此问题。

free()必须在指针上使用,但是在您的for循环中,您尝试在结构内部的特定成员(特别是list_grades成员)上使用它。

解决方案是在每个指针上调用free()(假设您将数组创建为结构数组,则是传递给函数的数组的每个索引),也许像这样:

void free_mem(student_t *stu[], int students){
    int i;
    for(i = 0; i < students; i++)
    {
        free(stu[i]);
    }
}

07-27 13:18
查看更多