Ok, donc je travaille sur une mission et pour la vie de moi, je ne peux pas comprendre pourquoi je reçois ces failles de segmentation. Je suis encore en train d'apprendre le C++, la programmation en général, alors j'espérais que quelqu'un de plus sage que moi puisse m'aider. Le programme est un arbre de recherche binaire auto-organisé et je n'avais pas trop de difficulté avec ça jusqu'à maintenant. Voici le début d'un programme principal que j'utilise pour tester ma classe BST, je ne peux pas modifier le programme mian puisqu'il s'agit d'une affectation.Bizarre erreurs de segmentation de la segmentation
int main() {
string input;
// get a list of integer values
cout << "Enter a list of integer values in one line: ";
getline(cin, input);
cout << "\n**CHECKPOINT 1**\n";
// create a binary search tree
BST<int> bst1(input);
if (!bst1.empty()) {
cout << "\n**CHECKPOINT 2**\n";
cout << "Inorder traversal: ";
bst1.printInOrder();
cout << "Level order traversal: ";
bst1.printLevelOrder();
Je dois encore franchir la fonction printInOrder(), voici le code pour que
template <typename T>
void BST<T>::printInOrder(BSTNode* t) const
{
if (t->left != NULL)
printInOrder(t->left);
std::cout << " " << t->data << " ";
if (t->right != NULL)
printInOrder(t->right);
}
La chose vraiment étrange qui me confond si cela quand j'ajoute un Cout rapide < < « Quelque chose » à la première ligne de la fonction printInOrder, tout d'un suddent sera la ligne d'impression
cout << "Inorder traversal: ";
et il sera également commencer à imprimer quelques-uns des chiffres dans e L'arbre avant de me donner finalement un défaut de segmentation. Donc, je serais vraiment reconnaissant si quelqu'un pouvait m'expliquer WTF se passe. L'ajout ou la soustraction d'une ligne de cout simple ne devrait pas changer les choses comme ça le devrait? En outre, je pense qu'il y a de meilleures façons de déboguer cela, si quelqu'un a des techniques qu'ils utilisent pour comprendre ce truc, s'il vous plaît partager :) Merci d'avance! J'ai essayé le débogueur GDB, j'ai été incapable de le comprendre, mais je ne suis pas très bien versé dans les fonctionnalités avancées des débogueurs, donc j'ai peut-être raté quelque chose. La seule autre fonction exécutée est le constructeur à construire à partir de l'entrée de chaîne. D'après ce que je pourrais dire à partir du débogueur est que le constructeur semble fonctionner très bien, mais est néanmoins ici le code
template <typename T>
BST<T>::BST(const std::string input, int th)
{
threshold = th;
root = NULL;
T v;
// Make Input String Stream for easy use of >> operator
std::istringstream iss (input);
do
{
iss >> v;
insert(v, root);
}while(iss.good());
}
EDIT2:
Voici le code de ma fonction d'insertion, Merci pour l'aide Tout le monde! :) dans l'arbre
template <typename T>
void BST<T>::insert(const T& v, BSTNode *&t)
{
if(t == NULL)
{
t = new BSTNode;
t->left = NULL;
t->right = NULL;
t->data = v;
t->searchCount = 0;
}
else if(v < t->data)
insert(v, t->left);
else
insert(v, t->right);
}
Avez-vous essayé d'utiliser un débogueur pour voir où il s'est écrasé? – kennytm
Si vous utilisez la sortie debug, utilisez peut-être 'std :: cerr' car il ne sera pas tamponné comme' std :: cout' – UncleBens
Je pense que nous avons besoin de plus de code ici, ... peut-être que le problème est avec l'entrée. ..mais c'est vraiment impossible à dire sans plus de code ... –