C语言冒泡排序数组越界

#include "stdio.h"

#define N 8

int main()
{
    int a[N]={9,8,3,7,5,2,6,1};
    int i,j,temp;

    for(j=0;j<=N-2;j++)
    {
        for(i=0;i<=N-j-1;i++)//出错行 去掉=时VS环境编译才正常
        {
            if (a[i] > a[i + 1])
            {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
    }
    printf("Result\n");
    for(i=0;i<=N-1;i++)
    {
        printf("%3d",a[i]);
    }
    return 0;
}

IDE使用CLion 工具链使用Visual Studio时报错

CLion切换至MinGW环境编译时结果正常

请问这是为什么

N = 8, a[] 数组范围 是 0..7

j 是 0 ..6, 

i 是 0 .. 7,  这样, a[i +1] 就可能是 a[8], 越界了! 

N-j-1最大值是7,因为14,17,18行的i+1最大值是8,超出了数组的上标N-1,所以出错了,删除=就正常了。

 

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y