2016-08-03 224 views
-2

我一直在解决SPOJ上的this问题。使用在线评审时遇到的最常见问题之一是Runtime Error。你永远不知道哪个案例导致Segmentation fault。请帮我弄清楚为什么下面的代码对应于Runtime ErrorSegmentation Fault,即使我已确保每个可能的情况在我的linux gcc上正常运行。在Online Judge上运行时遇到运行时错误

#include <iostream> 
#include <math.h> 
#include <cmath> 
#include <cstdio> 
#include <cstdlib> 
#include <string> 
#include <vector> 


using namespace std; 

int main() 
{ 
    int t,i; 
    cin >> t; 
    string s; 
    vector<int> A; 


    while(t--) 
    { 

     cin >> s; 
     int n=s.size(); 
     int temp; 

     if (n!=1) 
     { 
      for(i=0;i<s.size();i++) 
      { 
       A.push_back(s.at(i)-'0'); 
      } 

      if(n%2!=0) 
       { i = (n-1)/2; 

        while(A[i-1]==A[n-i]) 
         i--; 

        i--; 
       } 

      else 
       { i=n/2-1; 

        while(A[i]==A[n-1-i]) 
         i-- ;  
       } 


      if (A[i]<A[n-i-1]) 
       { 
        if ((n%2)!=0) 
         { 
          A[n/2] = A[n/2] + 1; 
          A[n-i-1] = A[i]; 
         } 
      else 
       { 
        A[n/2-1] = A[n/2-1]+1; 
        A[n/2] = A[n/2-1]; 
        A[n-i-1] = A[i]; 
       } 
      } 

      else 
       A[n-i-1] = A[i]; 

      while(i--) 
       A[n-i-1] = A[i]; 



      while(!(A.empty())) 
      { 
       printf("%d",A.back()); 
       A.pop_back(); 
      } 
     } 

     else 
      cout << s; 

    } 

} 
+1

请缩进您的代码。 –

+0

嗨@VaibhavBajaj,完成! –

+0

你会收到错误文本吗?如果是这样,请张贴。 – donjuedo

回答

0

,我发现你的问题进行分割故障之一,当你给例如“AAAAA”输入到是你会得到段错误的代码

if(n%2!=0) 
      { i = (n-1)/2; 

       while(A[i-1]==A[n-i]) 
        i--; 

       i--; 
      } 

这部分是因为你没有检查我< 0或不