一直显示访问冲突如何修改?


#include
struct student{
    int c, m, e;
    int num,sum;
}a[1005],b[1005];
int main()
{
    int n;
    while (scanf_s("%d", &n) == 1)
    {
        for (int i = 0; i < n; i++)
        {
            scanf_s("%d %d %d %d %d", &a[i].num, &a[i].c, &a[i].m, &a[i].e);
            a[i].sum = a[i].c + a[i].m + a[i].e;
        }
        for (int i = 0; i < n; i++)
        {
            for(int j=i;j0, y = n-1;
        while (a[x].sum == a[x + 1].sum)
        {
            x++;
        }
        for (int i = 0; i <= x; i++)
        {
            for (int j = i; j <= x; j++)
            {
                if (a[i].num < a[j].num)
                {
                    b[i] = a[i];
                    a[i] = a[j];
                    a[j] = b[i];
                }
            }
        }
        printf("BEST\n");
        for (int i = 0; i <= x; i++)
        {
            printf("%d %d %d %d %d\n", a[i].num, a[i].sum, a[i].c, a[i].m, a[i].e);
        }
        while (a[y].sum == a[y -1].sum)
        {
            y--;
        }
        for (int i = y; i "WORST\n");
        for (int i = y; i "%d %d %d %d %d\n", a[i].num, a[i].sum, a[i].c, a[i].m, a[i].e);
        }
    }
}

一直显示访问冲突如何修改?

代码的问题是您b在排序循环中使用了未初始化的变量。这可能会导致访问冲突错误,因为您正试图读取或写入尚未分配或初始化的内存。

要解决此问题,您可以简单地删除b数组并使用临时变量来存储要交换的元素。