SIGSEGV на подаче - PullRequest
       5

SIGSEGV на подаче

2 голосов
/ 25 декабря 2011

я решал проблему 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) и другой для хранения миров после прибытия английского слова (v2) после этого я печатаю содержимое v2, затем слово и затем содержимое v1.

, пожалуйста, помогите мне понять, почему этот код вызывает ошибку сегментации.

1 Ответ

4 голосов
/ 25 декабря 2011

не мешайте, ребята ... я получил свою ошибку

Ошибка в строке for(i=0;i<v1.size()-1;i++)

, когда v1.size() равно 0, тогда size () возвращает без знаказначение ... следовательно 0-1 будет очень большим значением и, следовательно, SIGSEGV

...