请问运行后,图中红框里为什么是随机值?

如图,这是一个输入信息、打印信息、比较信息的小程序,但是在最后运行的时候红框里部分输出是随机值,请问什么原因?

img


#include<stdio.h>
#include<stdlib.h>
struct student
{
    char name[50];
    int age;
    int score;
};
void setinfo(struct student *ws,int a )
{
    int i;
    for(i = 0;i < a;i++)
    {
        printf("请输入第%d个人信息\n",i+1);
        scanf("%s%d%d",ws[i].name,&ws[i].age,&ws[i].score);
    }
  }
void showinfo(struct student *p,int n)
{
    int i;
    for(i = 0;i < n;i++)
    {
        printf("name is %s\n age is %d\n score is %d\n ",p[i].name,p[i].age,p[i].score);
    }
}
void getmax(struct student*q,int c)
{
    int i,max=0;
    max = q[0].score;
    for(i = 1;i <c ;i++)
    {
        if(max < q[i].score)
        {
            max = q[i].score;
        }
    }
    printf("%s %d %d\n",q[i].name,q[i].age,q[i].score);
}
int main()
{
    int n;
    printf("请输入人数:\n");
    scanf("%d",&n);
    struct student *p = (struct student*)malloc(n*sizeof(struct student));
    setinfo(p,n);
//    getmax(p,n);
    showinfo(p,n);
    getmax(p,n);
        free(p);
    return 0;
}

第38行,i已经是3了

void getmax(struct student*q,int c)
{
    int i,j,max=0;
    max = q[0].score;
    j=0;
    for(i = 1;i <c ;i++)
    {
        if(max < q[i].score)
        {
            max = q[i].score;
            j=i;
        }
    }
    printf("%s %d %d\n",q[j].name,q[j].age,q[j].score);
}


getmax 的时候 最后打印时 i 为 3,需要在获取最大值时,获取最大值对应的下标

void getmax(struct student*q,int c)
{
    int i,max=0, max_index = 0;
    max = q[0].score;
    for(i = 1;i <c ;i++)
    {
        if(max < q[i].score)
        {
            max = q[i].score;
            max_index = i;
        }
    }
    printf("%s %d %d\n",q[max_index].name,q[max_index].age,q[max_index].score);
}

访问未申请的内存,可能获得随机值,可能造成程序异常退出

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^