data[]的数据哪里溢出了?

我是用vs2019写的

img


#include<stdio.h>
#define n 5//把一个长度为n的一维数组的元素从小到大排列
int main(void)
{
    int i, j, t;
    int data[n];
    printf("请输入%d个数字\n", n);
    for (i = 0; i < n; i++)
    {
        scanf_s("%d", &data[i]);
    }
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - i; j++)
        {
            if (data[j] > data[j + 1])
            {
                t = data[j + 1];
                data[j + 1] = data[j];
                data[j] = t;
            }
        }
    }
    printf("从小到大的顺序:\n");
    for (i = 0; i < n; i++)
    {
        printf("%d", data[i]);
    }
    return 0;
}

for (j = 0; j < n - i; j++)
{
if (data[j] > data[j + 1]
这里有溢出,当i=0时,j可以等于n-1,此时data[j+1]是溢出了
改为for(j=0;j<n-i-1;j++)即可

i=0,j=4的时候data[j+1]就炸了

data[j + 1]
j 的取值范围 0 - (n-1)
j+1 会使 data溢出