我一直在解决SPOJ上的this问题。使用在线评委时遇到的最常见问题之一是Runtime Error
。你永远不知道哪个案例会导致Segmentation fault
。请帮我弄清楚为什么下面的代码对应Runtime Error
或Segmentation 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;
}
}
答案 0 :(得分:0)
我发现你的分段错误有一个问题,当你给s的“aaaaa”输入时,你会在这部分代码上得到分段错误
if(n%2!=0)
{ i = (n-1)/2;
while(A[i-1]==A[n-i])
i--;
i--;
}
因为你没有检查我&lt; 0或不