J'implémente une structure de données trie simple en C++ en utilisant struct et pointters. Quand je passe une chaîne à ajouter à trie, cela donne une erreur de segmentation dans la fonction addString().Erreur de segmentation de l'implémentation Trie C++
struct node {
char ch;
node *link[26];
node() : link(){}
};
node head;
void addString(node *n, string s) {
if (!s.length()) return;
if (!n -> link[(int)s[0] - 97]) {
node m;
m.ch = s[0];
n -> link[(int)s[0] - 97] = &m;
}
addString(n -> link[(int)s[0] - 97], s.substr(1));
}
int main(){
addString(&head, "red");
return 0;
}
J'ai essayé les instructions de débogage et même imprimé et mis en correspondance les valeurs d'adresse du noeud nouvellement créé et celui passé récursivement, ils étaient identiques. PS J'utilise un nœud de tête comme état epsilon.
S'il vous plaît ne pas utiliser le [tag: c] dans une balise: question [tag C++]. Ils sont deux tags différents pour une raison. –
Le bon outil pour résoudre ces problèmes est votre débogueur. Vous devez parcourir votre code ligne par ligne * avant * de demander Stack Overflow. Pour plus d'aide, veuillez lire [Comment déboguer de petits programmes (par Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Au minimum, vous devriez [modifier] votre question pour inclure un exemple [Minimal, Complet et Vérifiable] (http://stackoverflow.com/help/mcve) reproduisant votre problème, ainsi que les observations que vous avez faites dans le débogueur. –
Recommander contre le 97. «a» est presque infiniment plus facile à interpréter. – user4581301