生成,编译都过了,但是调试的时候出有关问题了,求大神指教

生成,编译都过了,但是调试的时候出问题了,求大神指教啊
#include <stdio.h>
struct student {
    char name[20];
    int idnum;
    float score[3]; //分别存三科成绩
    double total; // 总分
};
struct student * highscore(struct student *s, int n)
{
    int i;
    struct student * high=s;
    for(i = 0; i < n; i++) 
{
        (s+i)->total = (s+i)->score[0] + (s+i)->score[1] + (s+i)->score[2];
        if(high->total < (s+i)->total)
            high = s+i;
    }
    return high;
}
main()
{
    struct student *s, student[5];
    // 录入学生信息
    for(s = student; s < student+5; s++) {
        printf("输入第%d个学生的信息:\n", s-student+1);
        printf("姓名:");
        scanf("%s", s->name);
        printf("学号:");
        scanf("%d", &s->idnum);
        printf("语文 数学 英语:\n");
        scanf("%f %f %f", &(s->score[0]), &(s->score[1]), &(s->score[2]));
    }
    // 输出学生信息
    printf("\n学生信息\n姓名\t学号\t语文\t数学\t英语\n");
    for(s = student; s < student+5; s++)
        printf("%s\t%d\t%.1f\t%.1f\t%.1f\n", s->name, s->idnum, s->score[0], s->score[1],s->score[2]);
    // 计算学生总分病返回总分最高的学生信息
    s = highscore(student, 5);
    printf("\n总分最高的学生是:%s,学号:%d\n成绩:语文:%.1f数学:%.1f英语:%.1f总分:%.1f\n",  s->name, s->idnum, s->score[0], s->score[1],s->score[2], s->total);
}
红色字那里调试出问题了,0x00283913 处未处理的异常: 0xC0000005: 读取位置 0x00000028 时发生访问冲突,该怎么改啊啊生成,编译都过了,但是调试的时候出有关问题了,求大神指教
------解决方案--------------------
    int i;
     struct student * high=s;
     for(i = 1; i < n; i++) 
 {
            if(s[i])->total > s->total)
             high = s;
     }
     return high;

前提是,你计算了total。 而且,实用double值做比较。存在精确度问题。 自己解决吧。
------解决方案--------------------
我怎么看着没问题啊——生成,编译都过了,但是调试的时候出有关问题了,求大神指教
------解决方案--------------------
哥们,我编译没错呀!!!生成,编译都过了,但是调试的时候出有关问题了,求大神指教