数组排序中的交换问题


#include
main()
{
    int a[10], tem = 0, smlr;
    for (int i = 0; i < 10; i++)
        scanf_s("%d", &a[i]);
    for (int old = 0; old < 9; old++)
    {
        smlr = old;
        for (int new = 1 + old; new < 10; new++)
            if (a[new] < a[smlr])
                smlr = new;                  
        if (smlr != old)
        {
            tem = a[smlr];
            a[smlr] = a[old];
            a[old] = tem;
            /*
            tem = a[old];
            a[old] = a[smlr];
            a[new] = tem;
            */
        }
    }
    for (int i = 0; i < 10; i++)
        printf("%d ", a[i]);
    return 0;
}

请问注释内和注释外的交换部分有什么区别,为什么其中一个会报错

img

注释里面的new这里应该会编译报错吧,你把他定义到外面的话这里new会变成10  a[10]会造成数组越界
a[new] = tem;

可能是数组访问越界了

a[new] = tem;
改为
a[smlr] =tem;
new的值在循环中已经存进smlr里了,而出了循环new的值已经越界了,你这样用当然报错了