为什么我要把程序不运行的声明写入主函数



当我将以下三行代码写入主函数时,程序将不会运行。

const int N = 500005;
long long a[N]={0};
long long b[N]={0};

起初,我认为这是";const";,但我删除了";const";但它仍然无法运行。当我把这三行代码放在主函数之外,程序就能成功运行时,我不知道为什么。这是完整的代码:

using namespace std;
int main()
{
const int N = 500005; 
long long a[N]={0};
long long b[N]={0};
long long n,q;
cin>>n>>q;
for(long long i=1;i<=n;i++)
{
cin>>a[i];
b[i]=a[i]-a[i-1];
}
while(q--)
{
long long l,r,x;
cin>>l>>r>>x;
b[l]+=x;
b[r+1]-=x;
}
for(long long i=1;i<=n;i++)
{
b[i]+=b[i-1];
if(b[i]<0)
{
cout<<"0"<<" ";
}
else
cout<<b[i]<<" ";
}
return 0;
}

在main中,数组具有自动存储持续时间。在命名空间范围中声明的数组具有静态存储持续时间,该持续时间是在程序运行之前保留的。

因此,问题的原因是没有足够的内存用于为如此大的数组自动分配变量。

您可以使用标准容器std::vector<long long>的对象来代替数组。

相关内容

  • 没有找到相关文章

最新更新