同一个代码,在不同编译器中运行结果不同,为什么?

我遇到的问题是:
在调试中先用DevC++,发现输出有问题,然后去对比别人的代码没有发现区别,然后我换了Visual Studio发现输出结正确了,这让我感到很疑惑,可以帮吗解答一下吗?

img

img

代码问题描述:
我们有N个正整数,均小于10000。现在需要将这些正整数按照该正整数每一位数字相加的和从小到大排序,即该正整数的每一位数字相加的和越小排位越靠前。如果各位相加和相等,则按照正整数的值从小到大排序。

代码如下

#include <iostream>
#include <algorithm>
using namespace std;
int arr[105];
bool cmp(int a,int b)
{
    int a1,b1=0;
    int c=a;
    int d=b;
    while(a)
    {
        a1+=a%10;
        a=a/10;
    }
    while(b)
    {
        b1+=b%10;
        b=b/10;
    }
    if(a1==b1)
    {
        return c<d;
    }
    else
        return a1<b1;
}

int main()
{
    int n;
    cin >> n;
    for(int i=0;i<n;i++)
    {
        cin >> arr[i];
    }
    sort(arr,arr+n,cmp);
    
    for(int i=0;i<n;i++)
    {
        cout<< arr[i]<<" ";
    }
    return 0;
}

a1没有初始化为0

a1没初始化