2016-08-03 71 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或不