Я не знаю, что вызывает сбой программы, кроме того, что она как-то связана с попыткой присвоить левому и правому потомкам некоторый указатель. Сообщение об ошибке отсутствует, программа просто не запускается. Я просто предполагаю, что это потому, что я неправильно назначаю указатели.
Вот структура:
struct TreeNode
{
Type nodeinfo;
BinaryTree<Type> *left;
BinaryTree<Type> *right;
};
Имя класса — BinaryTree, использующее шаблон. Вот оскорбительный метод:
template <typename Type>
void BinaryTree<Type>::setSubtree(Type a){
root = new TreeNode;
BinaryTree<Type> *b,*c;
root->nodeinfo=a;
b->root = s.top();
root->right = b;
s.pop();
c->root = s.top();
root->left = c;
s.pop();
s.push(root);
}
s является стеком типа TreeNode * и содержит узлы.
корень это отдельные узлы.
Я так много раз менял это, я забыл, с чего начал. Это тестовый код (setInfo работает просто отлично):
tree.setInfo('b');
tree.setInfo('c');
tree.setSubtree('-');
Любое понимание того, как я должен назначать указатели, будет с благодарностью.
BinaryTree<Type> *b,*c;
...
b->root = s.top();
...
c->root = s.top();
Вы никогда не инициализируете указатели b
а также c
,
Вы должны были поймать эти ошибки самостоятельно. Заходить на этот сайт в качестве первой защиты от ошибок — очень плохая идея. Вы не научитесь отлаживать. Как вы могли обнаружить эти проблемы без нашей помощи? С вашим компилятором, с инструментом анализа, таким как valgrind, с вашим отладчиком или даже с ручным исполнением вашего кода.
Узнайте, как использовать свой компилятор в своих интересах, включив предупреждения компилятора. GNU и clang будут отлавливать подобные ошибки при оптимизации компиляции и включении соответствующих предупреждений. Узнайте, как использовать отладчик. Узнайте, как вручную выполнить код.
Других решений пока нет …