2016-08-03 13 views
-2

私はSPOJでthisの問題を解決しています。オンライン審査員の使用中に発生する最も頻繁に発生する問題の1つはRuntime Errorです。どのケースがSegmentation faultにつながるかわからないすべての可能なケースが自分のlinux gccで正しく動作することを保証していますが、なぜ以下のコードがRuntime ErrorまたはSegmentation Faultに対応しているのか理解してください。オンラインジャッジで実行中にランタイムエラーが発生しました

#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

あなたが例えば与えるとき、私はあなたがいなかったので、コード

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

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

       i--; 
      } 

のこの部分にセグメンテーションフォールトを取得します、sの「AAAAA」の入力をセグメンテーションフォールトのためのあなたの問題の一つを発見しましたチェックi < 0または

関連する問題