我遇到细分错误

时间:2019-03-18 14:22:20

标签: c++ segmentation-fault

#include <bits/stdc++.h>
#define ll long long
using namespace std;

int main() {
int t;
cin>>t;

while(t--)
{
    ll n, a[10000000];
    cin>>n;

    for(int i=0;i<n;i++)
    cin>>a[i];

    for(int i=0;i<n-1;i++)
    {
        int flag=0;
        for(int j=i+1;j<n;j++)
        {
            if(a[j] > a[i])
            {
                cout<<a[j]<<" ";
                flag=1;
                break;
            }
        }

        if(flag==0)
         cout<<"-1 ";
}
cout<<"-1\n";
}
return 0;
}

为什么我在使用此代码时出现细分错误?代码中有什么错误吗?据我所知,代码没有错。请解释一下故障...

1 个答案:

答案 0 :(得分:1)

a[10000000]可能太大,无法自动存储。将大约1Mb的数量作为限制。

解决方法是将循环的前两行替换为

std::size_t n; // using a macro is a bad idea
std::cin >> n; // no professional programmer uses `using namespace std`
std::vector<long long/*using a macro is a bad idea*/> a(n);

请注意,如果std::vector过大,则应该处理n构造的任何例外情况。