SIGSEGV提交

时间:2011-12-25 15:51:25

标签: c++ string algorithm vector segmentation-fault

我正在解决这个问题 https://www.spoj.pl/problems/ACPC11A/

这是我的代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<vector>

using namespace std;

int main()
{
int tc,i,n;
scanf("%d",&tc);
while(tc--)
{
    vector<string> v1,v2;
    string str,w;
    scanf("%d",&n);
    int flag=0;
    for(i=0;i<n;i++)
    {
        cin>>str;
        if(str[0]!='#')
        {
            flag=1;
            w=str;
        }
        else if(flag==0)
        {
            v1.push_back(str);
        }
        else
            v2.push_back(str);
    }
    //print v2-->w-->v1
    for(i=0;i<v2.size();i++)
    {
        cout<<v2[i]<<" ";
    }
    if(w!="")
    cout<<w<<" ";
    for(i=0;i<v1.size()-1;i++)
        cout<<v1[i]<<" ";
    cout<<v1[v1.size()-1]<<endl;
    v1.clear();v2.clear();str.clear();w.clear();
}
return 0;
}

我得到了样本测试用例的正确输出...但是在提交时我的代码给出了分段错误。

我的逻辑很简单.. 我在英语单词到达之前用了2个向量1来存储单词(v1),在英语单词到达之后我用了2个向量来存储世界(v2) 之后,我打印v2的内容,然后是单词,然后是v1的内容。

请帮助我理解为什么这段代码会给出分段错误。

1 个答案:

答案 0 :(得分:4)

不要打扰别人......我犯了我的错误

错误在行for(i=0;i<v1.size()-1;i++)

v1.size()0时,则size()返回无符号值...因此0-1将是非常大的值,因此SIGSEGV