在Online Judges上运行时遇到运行时错误

时间:2016-08-03 19:55:45

标签: c++ c++11 runtime-error

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

#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 :(得分:0)

我发现你的分段错误有一个问题,当你给s的“aaaaa”输入时,你会在这部分代码上得到分段错误

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

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

                i--;
            }

因为你没有检查我&lt; 0或不