“Sigabrt 错误” - Codechef

Abh*_*ora 2 runtime sigabrt

以下代码在我的 DEV-C++ 编译器中完美运行,但是当我在 codechef 中提交时,运行 3-4 秒后显示“SIGABRT ERROR”。我已经研究了这个错误,并尽我所能调试,但即使一周后我也无法调试。请帮忙 !!提前致谢。

参考问题是http://www.codechef.com/problems/LOWSUM

enter code here


void selsort(long long *ssum,long long len)
{
        long long low;
    for(long long i=0;i<len;i++)
    {

    low = ssum[i];
    long long pos=i;
    for(int j=i+1;j<len;j++)
    {

        if(ssum[j]<low)
        {
            low = ssum[j];
            pos = j;

        }

    }


    ssum[pos] = ssum[i];
    ssum[i] = low;
}




}

int main()
{

int t,k,q;
cin>>t;

for(int i=0;i<t;++i)
{
    cin>>k;
    cin>>q;
    long long sq = k*k;

    long long *mot=NULL,*sat=NULL;
    mot = new long long [k];
    sat = new long long [k];
    long long *sum = new long long[sq];
    long long qth;
    long long b=0;

    for(int j=0;j<k;++j)        
    {
        cin>>mot[j];

    }

    for(int j=0;j<k;++j)            
    {
        cin>>sat[j];

    }

    for(int j=0;j<k;++j)            
    {   
        for(int a=0;a<k;++a)
        {
            sum[b] = mot[a]+sat[j];
            ++b;
        }   
    }

    selsort(sum,sq);


    for(int j=0;j<q;++j)
    {
        cout<<"\n";
        cin>>qth;
        cout<<"\n"<<sum[qth-1];
    }

    delete []sum;
    delete []mot;
    delete []sat;
}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

Nam*_*nha 5

由于引用codechef 的多种原因发送 SIGABRT 信号

SIGABRT 错误是由您的程序由于致命错误而中止引起的。在 C++ 中,这通常是由于 C++ 中的断言语句未返回 true,但如果某些 STL 元素尝试存储过多内存,则可能会生成此错误。

在您的情况下,似乎是使用了过多的内存

mot = new long long [k];
sat = new long long [k];
long long *sum = new long long[sq];
Run Code Online (Sandbox Code Playgroud)

请注意,k 的值可以大到 20000,因此声明一个大小为 k 的数组会很好,但是您的数组大小sq = k*k为 4*10^8,这会导致内存不足问题。而且你的算法也不够好,无法在时限内给出 AC。

Codechef 有自己的论坛来问这些问题,并且已经讨论了解决这个问题的更好方法

http://discuss.codechef.com/problems/LOWSUM