萌新提问 结构体

通过编译了,但无法打印结果  
值得一提的是我在多次插入printf语句时竟然看到有几次打印出了正确结果。。
求解答     是书上的一道例题,但我想用动态分配做
    #include<stdio.h>             //malloc memset
    #include<stdlib.h>
    #include<string.h>
    struct student {
     char name[20];//姓名 
        short fresult;//期末成绩 
    short cresult;//班级成绩 
    char su;      //是否学生会 
    char west;    //是否西部学生
    short paper;  //论文 
    };
    int main(void){
    struct student *Student=NULL;
    int n;
    scanf("%d",&n);
    Student=(struct student *)malloc(n*sizeof(int));
    if(Student==NULL) exit(1);
    memset(Student,0,n*sizeof(int));
    int i;
    for(i=0;i<n;i++){
        scanf("%s %d %d %c %c %d",&Student[i].name,&Student[i].fresult,&Student[i].cresult,&Student[i].su,&Student[i].west,&Student[i].paper);
    }//输入
    printf("44");
    int ssum=0;
    int *sum=NULL;
    sum=(int *)malloc(n*sizeof(int));
    if(sum==NULL) exit(1);
    memset(sum,0,n*sizeof(int));
    for(i=0;i<n;i++){
        sum[i]=0;
    }
    for(i=0;i<n;i++){
            if(Student[i].fresult>80&&Student[i].paper!=0) sum[i]+=8000;
            if(Student[i].fresult>85&&Student[i].cresult>80) sum[i]+=4000;
            if(Student[i].fresult>90) sum[i]+=2000;
            if(Student[i].fresult>85&&Student[i].west=='Y') sum[i]+=1000;
            if(Student[i].cresult>80&&Student[i].su=='Y') sum[i]+=850;
    }
    int max=0;
    for(i=0;i<n;i++){
        ssum+=sum[i];
        if(sum[max]<sum[i])
        max=i;
    }
    printf("%s\n",Student[max].name);
    printf("%d\n",sum[max]);
    printf("%d\n",ssum);
    free(Student);
    free(sum);
    return 0;    
    }

 Student=(struct student *)malloc(n*sizeof(int));

改为

Student=(struct student *)malloc(n*sizeof(student);

你的程序里面分配的内存太小了