问题:结构体成员char* name和结构体struct student* studentIOS同时释放的话回报错,错误见代码中注释。请问这里要怎么释放呢?还是结构体里面不能这样使用指针字符数组?
#include
#include
struct student{
int id; //长度:4
char* name; //8
int score[2]; //8
float avgScore; //4
};
void input(struct student*);
void output(struct student*);
void input(struct student* stu){
printf("(1)程序最多接受50名学生的信息,多余的无法录入\n");
printf("(2)不足50人,请输入-1结束输入\n");
for (int i=0; i<50; ++i) {
(stu+i)->name = (char*)malloc(15 * sizeof(char)); //给结构体中学生的name分配空间
printf("请在下面输入第%d名学生的信息\n",i+1);
printf("序号:");
scanf("%d",&(stu+i)->id);
if (-1 == (stu+i)->id) { //输入-1的时候,停止输入;退出输入函数
printf("输入结束\n");
return ;
}
printf("姓名:");
//gets((stu+i)->name);
scanf("%s",(stu+i)->name);
printf("C语言成绩:");
scanf("%d",&(stu+i)->score[0]);
printf("数序成绩:");
scanf("%d",&(stu+i)->score[1]);
(stu + i)->avgScore =( (stu + i)->score[0] + (stu + i)->score[1])/2.0;
}
return;
}
void output(struct student* stu){
printf("学生信息如下\n");
printf("学号\t\t姓名\t\tC语言\t数学\t\t平均\n");
for (int i=0; i
if (stu->id == -1) {
break;
}
printf("%d\t\t%s\t\t%d\t\t%d\t\t%.2f",stu->id,stu->name,stu->score[0],stu->score[1],stu->avgScore);
printf("\n");
}
return;
}
int main(int argc, const char * argv[]) {
struct student* studentIOS = (struct student*)malloc(50 * sizeof(struct student));
input(studentIOS);
//output(studentIOS);
// printf("%p\n%p",studentIOS->name,&studentIOS->name); //输出不同
/*
释放每个学生的name空间,或者释放学生结构体的空间, 测试发现二者只能释放一个
*/
//释放每个学生中的name空间
#if 0 //加上此循环,程序出问题,提示studentIOS未malloc
for (int i=0; i
if (NULL != studentIOS->name) {
free(studentIOS->name);
studentIOS->name = NULL;
}
}
#endif
#if 0 //加上下面的两句不会出问题
free((studentIOS+10)->name);
(studentIOS+10)->name = NULL;
#endif
free(studentIOS);
studentIOS = NULL;
return 0;
}