Хорошо, так что я работаю над заданием, и на всю жизнь я не могу понять, почему я получаю эти ошибки сегментации.Я все еще нахожусь в процессе изучения c ++, программирования в целом, поэтому я надеялся, что кто-то умнее меня сможет мне помочь.Программа представляет собой самоорганизующееся бинарное дерево поиска, и до сих пор у меня не было с этим особых проблем.Вот начало основной программы, которую я использую для проверки своего класса BST, я не могу изменить программу mian, так как это задание.
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();
Я еще не прошел функцию printInOrder (), вот код для этого
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);
}
Действительно странная вещь, которая меня смущает, если когда я добавляюquick cout << «Something» в первой строке функции printInOrder, все это suddent будет печатать строку </p>
cout << "Inorder traversal: ";
, и он также начнет печатать некоторые числа в дереве, прежде чем, наконец, дастя снова ошибка сегментации.: /
Итак, я был бы очень признателен, если бы кто-нибудь мог объяснить мне, что происходит WTF.Добавление или вычитание простой строки cout не должно изменить такие вещи, не так ли?Кроме того, я чувствую, что есть лучшие способы отладки этого, если у кого-то есть методы, которые они используют, чтобы выяснить это, пожалуйста, поделитесь :) Заранее спасибо!
РЕДАКТИРОВАТЬ: У меня естьпопробовал отладчик GDB, я не смог разобраться, но опять же я не очень хорошо разбирался в продвинутых функциях отладчиков, поэтому я мог что-то пропустить.Единственная другая функция, которая даже запускается, - это конструктор для построения из строкового ввода.Из того, что я могу сказать из отладчика, это то, что конструктор, кажется, работает нормально, но, тем не менее, вот код
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:
Вот код длямоя функция вставки, спасибо за помощь всем!:)
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);
}