spoj 中的 SIGSEGV 错误,但在 ideone 中工作正常

Posted

技术标签:

【中文标题】spoj 中的 SIGSEGV 错误,但在 ideone 中工作正常【英文标题】:SIGSEGV error in spoj but working fine in ideone 【发布时间】:2014-09-19 22:59:09 【问题描述】:

这是 spoj 上名为 maxsub 的问题的代码

#include<iostream>
#include<algorithm>

using namespace std;long long pow(int n);
int main()

   int t;
   cin>>t;
   while(t--)
   
        int n;
        cin>>n;
        long long int arr[n];
        for(int i=0;i<n;i++)
        cin>>arr[i];
        sort(arr,arr+n);
        int j=n-1;
        if(arr[n-1]<0)
        
            while(arr[j]==arr[j-1])
            

               j--;
            
            cout<<arr[n-1]<<" "<<(n-j)<<endl;
            j=n-1;

        
        else if(arr[n-1]==0)
        
            while(arr[j]==arr[j-1])
            

               j--;
               
            cout<<arr[n-1]<<" "<<(pow((n-j))-1)%1000000009<<endl;
            j=n-1;
    
         else
                 long long int sum=0;

                while(arr[j]>0)
                    sum+=arr[j];j--;
                 
                int k=0;
                if(arr[j]==0)
                 k=1;
                  while(arr[j]==arr[j-1])
                   
                        j--;k++;
                   

               cout<<sum<<" "<<pow((k)%1000000009)<<endl;
        






    





long long pow(int n)
   if(n==1)
    
       return 2;
    
    long long int m= pow(n/2);
    if(n%2==0)
    
       return (m*m)%1000000009;
    
    else
    
        return (m*m*2)%1000000009;
    


这段代码给出了 sigsegv 错误,但如果我用它替换上面的 pow 函数,那么它工作正常。

long long pow(int n)
int i=1;long long sum=1;
    while(n>=i)
    
        sum=sum*2;
        if(sum>=1000000009)
        
            sum=sum%1000000009;
        i++;
    
    return sum;


我使用递归的方式来寻找能力只是为了减少解决方案的运行时间。 但我无法了解它在 ideone 上所产生的影响,两者都工作正常。

【问题讨论】:

【参考方案1】:

您的递归不会终止,例如当你打电话给pow(0)时。

【讨论】:

以上是关于spoj 中的 SIGSEGV 错误,但在 ideone 中工作正常的主要内容,如果未能解决你的问题,请参考以下文章

SIGSEGV 提交

开发 C++ 中的 SIGSEGV(分段错误)错误

原生Android应用程序中的SIGSEGV错误

“程序收到信号SIGSEGV,分段错误”当试图使用递归获取3个字符组合的所有关键字时

为啥我的 SPOJ GCD2 代码在 SPOJ 上出错?

Vector.erase 中的 SIGSEGV