c++定义语句位置不同为什么运行结果不同

问题遇到的现象和发生背景 展开

题目描述
人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度可能一样。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮这些可爱但是鱼脑不够用的小鱼们计算一下。

输入格式
第一行输入一个整数 nn,表示鱼的数目。

第二行内输入 nn 个整数,用空格间隔,依次表示从左到右每只小鱼的可爱程度。

输出格式
行内输出 nn 个整数,用空格间隔,依次表示每只小鱼眼中有多少只鱼不如自己可爱。

问题相关代码,请勿粘贴截图 #include

using namespace std;
int n, a[101], b[101];
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
for (int i = 1; i <= n; i++)
{
for (int j = i; j >= 1; j--)
{
if (a[j] < a[i])
{
b[i]++;
}
}
}
for (int i = 1; i <= n; i++)
{
cout << b[i] << ' ';
}
return 0;
}

运行结果及报错内容 这个代码是正确的,但是将int n, a[101], b[101];放到主函数中会崩溃
我的解答思路和尝试过的方法
我想要达到的结果

int n, a[101], b[101];这个语句放到主函数内和主函数外有什么区别

放在main外,所有数值初始化为0,数组成员初始化为0,且为静态static,谁都能用。

放在main里,为local,只有main能用,且初始化归程序员管,如果不管,就是垃圾数据。

#include <iostream>

using namespace std;

int main()
{
    int n = 0;
    int a[5] = {0};
    int b[5] = {0};
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = i; j >= 1; j--)
        {
            if (a[j] < a[i])
            {
                b[i]++;
            }
        }
    }
    for (int i = 1; i <= n; i++)
    {
        cout << b[i] << ' ';
    }
    return 0;
}