SIGSEGV on Submission

SIGSEGV on Submission

本文关键字:Submission on SIGSEGV      更新时间:2023-10-16

我正在解决这个问题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;
}

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

我的逻辑很简单…我取了两个向量,一个用于存储英语单词到达之前的单词(v1),另一个用于存储英语单词到达之后的世界(v2)。然后打印v2的内容,然后是word,然后是v1的内容。

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

别烦了…我知道我错了

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

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