数据内存出错,但是分析不出来

软件是vs2019
#include<stdio.h>
int main()
{
void are(int arr[], int n);
int a[8], i;
printf("输入七个数字:\n");
for (i = 0; i < 7; i++)
scanf_s("%d", &a[i]);
printf("排列结果为:\n");
int k, g;
for (k = 0; k < 7; k++)
for (i = 0; i < 7 - k; i++)
if (a[i] > a[i + 1])
{
g = a[i];
a[i] = a[i + 1];
a[i + 1] = g;
}
for (i = 7; i >0; i--)
printf("%d\n", a[i]);
printf("输入第八个数字:\n");
scanf_s("%d", &a[8]);
are(a, 8);
printf("\n");
for (i = 0; i < 8; i++)
printf("%d\n", a[i]);
printf("\n");
return 0;
}
void are(int arr[], int n)
{
int i, j, t, y;
for (i = 1; i < n ; i++)
{
t = i;
for (j = i + 1; j < n+1; j++)
if (arr[i] < arr[t])
t = j;
y = arr[t];
arr[t] = arr[i];
arr[i] = y;
}
}
运行前面都还好,从输入a[8]之后开始出错了
感觉是后面的内存出现问题,但是处理不了

img

数组下标是从0开始的,第八个数字是a[7],不是a[8]

printf("输入第八个数字:\n");
scanf_s("%d", &a[7]);

你代码好多地方都错了。正确的如下:自己与注释的部分对比下

#include <stdio.h>
int main()
{
    void are(int arr[], int n);
    int a[8], i;
    printf("输入七个数字:\n");
    for (i = 0; i < 7; i++)
        scanf_s("%d", &a[i]);
    printf("排列结果为:\n");
    int k, g;
    // for (k = 0; k < 7; k++)
    for (k = 0; k < 6; k++)
        // for (i = 0; i < 7 - k; i++)
        for (i = 0; i < 6 - k; i++)
            if (a[i] > a[i + 1])
            {
                g = a[i];
                a[i] = a[i + 1];
                a[i + 1] = g;
            }
    // for (i = 7; i > 0; i--)
    for (i = 6; i >= 0; i--)
        printf("%d\n", a[i]);
    printf("输入第八个数字:\n");
    // scanf_s("%d", &a[8]);
    scanf_s("%d", &a[7]);
    are(a, 8);
    printf("\n");
    for (i = 0; i < 8; i++)
        printf("%d\n", a[i]);
    printf("\n");
    return 0;
}
void are(int arr[], int n)
{
    int i, j, t, y;
    // for (i = 1; i < n; i++)
    for (i = 0; i < n-1; i++)
    {
        t = i;
        // for (j = i + 1; j < n + 1; j++)
        for (j = i + 1; j < n; j++)
            // if (arr[i] < arr[t])
            if (arr[j] < arr[t])
                t = j;
        y = arr[t];
        arr[t] = arr[i];
        arr[i] = y;
    }
}

如有帮助,望采纳!谢谢!