gpt4 book ai didi

c - 清除内存的结构体和Free函数: C Programming

转载 作者:行者123 更新时间:2023-11-30 21:24:26 24 4
gpt4 key购买 nike

我正在创建一个程序,它将一个人的特征及其成绩/GPA 存储到一个结构中,然后重新打印出所有这些特征。输入的成绩/GPA是浮点类型的指针。我的 free_mem 函数在释放内存空间时遇到问题。 Student_t 是我的结构体数据类型的名称,*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,但对第二部分仍然感到困惑。

错误:“free”的参数 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]);
}
}

关于c - 清除内存的结构体和Free函数: C Programming,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36671205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com