TTmrxb 2015-09-16 13:16 采纳率: 0%
浏览 3280

结构体内指针字符数组的释放

问题:结构体成员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;
}

  • 写回答

4条回答 默认 最新

  • threenewbee 2015-09-16 13:21
    关注

    先释放name,再释放结构体,因为name是指针

    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘