Deux méthodes similaires et segmentation fault
Bonjour à tous
Mon cerveau est en train d'exploser à cause de ce problème ^^
J'ai une classe Rule dont voici les attributs :
Code:
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;
} |
Cette classe a plusieurs méthodes, dont deux très similaires :
Code:
1 2 3 4 5
|
void Rule::addFollowingRule(Rule* newFollowingRule) // Ajoute une followingRule
{
m_followingRules.insert(make_pair(newFollowingRule->getInvolvedWords(), newFollowingRule));
} |
Code:
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;
} |
Dans la fonction qui les utilise, on a :
Code:
1 2 3 4 5 6 7
|
if(replacement)
{
ok = motherRule->changeFollowingRule(newRule);
if(!ok) return 0;
}
else motherRule->addFollowingRule(newRule); |
Le code se compile sans erreur ni warning.
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 :
Code:
1 2 3 4 5 6
|
bool Rule::changeFollowingRule(Rule* newRule) // Remplace une followingRule existante
{
int a = m_followingRules.size();
return 1;
} |
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 !