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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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(); };voici l'éxécution du programme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); }
quelqu'un a une idée?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
Partager