请问为什么这段代码在devc和code block还有vc上运行的结果不同

#include
using namespace std;

void arrayl();
void otherarrayl();
int num;

int main()
{
int a[]={10,20,30,40,50,60,70,80,90,100};
for(int i=0;i<10;i++)
cout<<a[i]<<",";

cout<<endl<<endl<<"input num=";

cin>>num;
otherarrayl();
if(a[9]>num)
{
    cout<<a[9];     
}
else
{
    cout<<num;
}

}

void arrayl()
{
int a[]={10,20,30,40,50,60,70,80,90,100},i,j;
for(j=0;j<=10;j++)
{
if(a[j-1]>num)
{
break;
}
if(num>a[j-1]&&num<a[j])
{
a[j+1]=a[j];
a[j]=num;
}
cout<<a[j]<<",";
}
}

void otherarrayl()
{
arrayl();
int a[]={10,20,30,40,50,60,70,80,90,100},i,j;
for(i=0;i {
if(a[i]>num)
cout<<a[i+1]<<",";
}
cout<<endl;
}

有2个地方数组访问越界,dev和vc对没有初始化的数据给的初值不一样吧

 void arrayl()
{
    int a[] = { 10,20,30,40,50,60,70,80,90,100 }, i, j;
    for (j = 0; j < 10; j++)        //不存在a[10],所以j只能到9,去除等号
    {
        if (a[j - 1] > num)
        {
            break;
        }
        if (num > a[j - 1] && num < a[j])
        {
            a[j + 1] = a[j];
            a[j] = num;
        }
        cout << a[j] << ",";
    }
}
void otherarrayl()
{
    arrayl();
    int a[] = { 10,20,30,40,50,60,70,80,90,100 }, i, j;
    for (i = 0; i < 9; i++) {       //数组10个元素,下标到9,但下面用到i+1,所以i<9
        if (a[i] > num)
            cout << a[i + 1] << ",";
    }
    cout << endl;
}