C++ 如何解决超大阵列输入的SIGSEGV错误?

C++ 如何解决超大阵列输入的SIGSEGV错误?,c++,segmentation-fault,C++,Segmentation Fault,所以,我在HackerEarth中解决了一个问题,它将您的代码测试到非常大的测试用例中。因此,当我试图提交代码时,它通过了前6个测试用例,对其他5个测试用例,它给出了“超过时间限制”,对所有其他测试用例,它给出了SIGSEGV信号 代码如下: #include<bits/stdc++.h> #include<cmath> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie

所以,我在HackerEarth中解决了一个问题,它将您的代码测试到非常大的测试用例中。因此,当我试图提交代码时,它通过了前6个测试用例,对其他5个测试用例,它给出了“超过时间限制”,对所有其他测试用例,它给出了SIGSEGV信号

代码如下:

#include<bits/stdc++.h>
#include<cmath>
using namespace std;

int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
long long unsigned int tc,b, a , d,c;
cin>>tc;
for(int i=0;i<tc;++i)
{
    cin>>a;
    cin>>d;
    cin>>c;
    cin>>b;
    long long unsigned int arr[b+1];
    arr[0]=a;
    arr[1]=d;
    arr[2]=c;



    if(b>=3){

        for(long long unsigned i=3;i<=b;++i)
        {
            // arr[i]%=1000000007;
            (arr[i])=(arr[i-1]+3*arr[i-3]+2*i)%1000000007;
            arr[i]%=1000000007;
        }
        printf("%llu \n",arr[b]%1000000007);



    }
    else{
        printf("%llu \n",arr[b]%1000000007);
    }
}
return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
ios_base::与_stdio同步(false);
cin.tie(空);
长无符号整数tc,b,a,d,c;
cin>>tc;
对于(int i=0;i>a;
cin>>d;
cin>>c;
cin>>b;
长无符号整数arr[b+1];
arr[0]=a;
arr[1]=d;
arr[2]=c;
如果(b>=3){

对于(long long unsigned i=3;i您正在尝试访问无法访问的内存。这就是SIGSEGV的原因。您需要静态声明数组大小,而不是动态声明数组大小


<>但是,使用向量是更好的,因为你使用的是C++。

这不是我编译的。
a VLA,但
b
甚至没有初始化。因此,即使它确实编译,它也是未定义的行为,这意味着任何事情都可能发生,包括SIGSEGV错误。第一步是重写该位以不显示未定义的行为。我也会删除VLA,但看起来编译器不介意,所以这取决于您u、 编译时,应启用所有警告,并仔细阅读编译器的说明,例如:SIGSEGV不是错误,而是操作系统内核发送的信号,表示您的程序已尝试访问其无权访问的计算机内存区域。