segmentation fault, breakpoint inutile
bonjour à tous,
j'ai écris ce code et je n'arrive pas à trouver où est la cause du segmentation fault
cela arrive lors que je choisi la commande "simplifier":
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
vector<production> grammaire;
vector<production> grammaireTemp;
vector<production> grammaireUtiles;
vector<string> terminaux;
vector<string> nonTerminaux;
int main(){
unsigned int n;
string choix;
char c;
string reponse;
while(true){
cout<<"ajout"<<endl;
cout<<"lister"<<endl;
cout<<"terminaux"<<endl;
cout<<"nonterminaux"<<endl;
cout<<"effacer"<<endl;
cout<<"simplifier"<<endl;
cout<<"quitter"<<endl<<endl;
cout<<"Votre choix : ";
cin>>choix;
if(choix=="ajout")
plusProduction();
else if(choix=="lister")
listerGrammaire();
else if(choix=="terminaux")
listerTerminaux();
else if(choix=="nonterminaux")
listerNonTerminaux();
else if(choix=="effacer"){
cout<<"Indiquez le numéro, dans la liste, de la production à effacer : ";
do
cin>>n;
while(n==0||n>grammaire.size())
;
cout<<"S'agit-il de cette prduction?"<<endl;
grammaire[n-1].ecrire();
cin>>reponse;
if((c=reponse[0])=='o'||c=='O')
effacerProd(n-1);
cout<<"La production a été effacée"<<endl;
}
else if(choix=="simplifier")
simplifier();
else if(choix=="quitter")
break;
else
cout<<"commande inconnue"<<endl;
}
}
void simplifier(){
string X("");
unsigned int i;
bool trouve=false;;
for(i=0;i<grammaire.size();i++)
if(queTerminaux(i)){
trouve=true;
grammaireUtiles.push_back(grammaire[i]);
}
if(trouve)
sontUtiles2();
grammaire.clear();
grammaire=grammaireUtiles;
chercherTerminauxEtNonTerminaux();
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| class production{
private:
std::string tete;
std::vector<std::string> corps;
public:
std::string getTete();
void setTete(std::string x);
void ajouter(std::string x);
void ecrire();
unsigned int size();
std::string chezCorps(int i);
void enleverDernierCorps();
}; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| string production::getTete(){
return tete;
}
void production::setTete(string x){
tete=x;
}
void production::ajouter(string x){
corps.push_back(x);
}
void production::ecrire(){
cout<<tete<<" ::= ";
for(unsigned int i(0);i<corps.size();i++){
cout<<corps[i];
if(i!=corps.size()-1)
cout<<" ";
}
cout<<endl;
}
unsigned int production::size(){
return corps.size();
}
string production::chezCorps(int i){
return corps[i];
}
void production::enleverDernierCorps(){
corps.pop_back();
} |
voici l'éxécution du programme
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
ajout
lister
terminaux
nonterminaux
effacer
simplifier
quitter
Votre choix : ajout
Nom de tête de la production :
s
Entrez le corps de la production s
0
ajout
lister
terminaux
nonterminaux
effacer
simplifier
quitter
Votre choix : ajout
Nom de tête de la production :
s
Entrez le corps de la production s
a
ajout
lister
terminaux
nonterminaux
effacer
simplifier
quitter
Votre choix : ajout
Nom de tête de la production :
a
Entrez le corps de la production a
a b
ajout
lister
terminaux
nonterminaux
effacer
simplifier
quitter
Votre choix : ajout
Nom de tête de la production :
b
Entrez le corps de la production b
1
ajout
lister
terminaux
nonterminaux
effacer
simplifier
quitter
Votre choix : lister
Voulez-vous l'ensemble des productions?(o/n) o
1 : s ::= 0
2 : s ::= a
3 : a ::= a b
4 : b ::= 1
ajout
lister
terminaux
nonterminaux
effacer
simplifier
quitter
Votre choix : simplifier
Erreur de segmentation (core dumped) |
quelqu'un a une idée?