69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
typedef struct students{
char id[9];
int scored;
int scorec;
int scorea;
int level;
}student;
int main(){
int M,line1,line2;
int i=0;
student *stu;
scanf("%d %d %d",&M,&line1,&line2);
stu=(student*)malloc(M*sizeof(student*));
for(i=0;i<M;i++){
scanf("%s %d %d",&stu[i].id,&stu[i].scored,&stu[i].scorec);
stu[i].scorea=stu[i].scored+stu[i].scorec;
}
free(stu);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char id[8];
int score;
}student;
int main(){
int M;
student *stu;
scanf("%d",&M);
stu=(student*)malloc(M*sizeof(student*));
for(int i=0;i<M;i++){
scanf("%s %d",&stu[i].id,&stu[i].score);
}
free(stu);
return 0;
}
tu=(student*)malloc(M*sizeof(student*));
改一下这句,改成这样:去掉sizeof括号内的*
stu=(student*)malloc(M*sizeof(student));
因为加上*则是申请了M * sizeof(int)个字节的空间,因为加上*就是申请M个指针,指针变量的大小和int类型占用内存的大小一样。
从你的接下来的代码来看,你要申请的不是M个指针,而是申请M个student类型的变量,即M * sizeof(student)