2 votes

SIGSEGV sur la soumission

J'étais en train de résoudre le problème https://www.spoj.pl/problems/ACPC11A/

et voici mon code :

#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;
}

J'obtiens la sortie correcte pour l'exemple de cas de test... mais lors de la soumission de mon code, il y a une erreur de segmentation.

Ma logique est simple j'ai pris 2 vecteurs 1 pour stocker les mots avant l'arrivée d'un mot anglais (v1) et l'autre pour stocker les mondes après l'arrivée d'un mot anglais (v2) ensuite j'imprime le contenu de v2 suivi du mot puis du contenu de v1.

aidez-moi à comprendre pourquoi ce code donne une erreur de segmentation.

4voto

Amol Sharma Points 569

Ne vous embêtez pas les gars... j'ai compris mon erreur.

L'erreur se trouve dans la ligne for(i=0;i<v1.size()-1;i++)

quand v1.size() es 0 alors que size() renvoie une valeur non signée...d'où 0-1 sera très grande et donc le message SIGSEGV

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X