Bonjour à tous
Mon cerveau est en train d'exploser à cause de ce problème ^^
J'ai une classe Rule dont voici les attributs :
Cette classe a plusieurs méthodes, dont deux très similaires :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class Rule { std::vector<std::string> m_answers; std::vector<int> m_numAnswers; std::vector<int> m_answersType; std::vector<std::string> m_involvedWords; int m_numCombination; std::map<std::vector<std::string>, Rule*> m_followingRules; // C'est celui-là qui nous intéresse int m_lineNumber; Rule* m_motherRule; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void Rule::addFollowingRule(Rule* newFollowingRule) // Ajoute une followingRule { m_followingRules.insert(make_pair(newFollowingRule->getInvolvedWords(), newFollowingRule)); }Dans la fonction qui les utilise, on a :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 bool Rule::changeFollowingRule(Rule* newRule) // Remplace une followingRule existante { vector<string> keywords = newRule->getInvolvedWords(); Rule* precedentRule = m_followingRules[keywords]; m_followingRules[keywords] = newRule; delete precedentRule; return 1; }
Le code se compile sans erreur ni warning.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 if(replacement) { ok = motherRule->changeFollowingRule(newRule); if(!ok) return 0; } else motherRule->addFollowingRule(newRule);
Dans le cas où replacement = 0, on exécute addFollowingRule sur motherRule, tout vas bien, sans problème. Dans le cas où replacement = 1, quelque soit la manipulation de m_followingRules que je fais dedans, j'ai un segmentation fault.
Même si je change ma fonction pour :
Je ne comprends vraiment pas ce qui se passe, il n'y a pas du tout de problèmes dans les autres méthodes de la classe Rule. C'est sûrement un truc très bête mais je n'arrive pas à le voir. Merci d'avance pour votre aide !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 bool Rule::changeFollowingRule(Rule* newRule) // Remplace une followingRule existante { int a = m_followingRules.size(); return 1; }
Partager