Ошибка запуска (неизвестная причина)

Я не знаю, что вызывает сбой программы, кроме того, что она как-то связана с попыткой присвоить левому и правому потомкам некоторый указатель. Сообщение об ошибке отсутствует, программа просто не запускается. Я просто предполагаю, что это потому, что я неправильно назначаю указатели.

Вот структура:

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('-');

Любое понимание того, как я должен назначать указатели, будет с благодарностью.

0

Решение

BinaryTree<Type> *b,*c;
...
b->root = s.top();
...
c->root = s.top();

Вы никогда не инициализируете указатели b а также c,

Вы должны были поймать эти ошибки самостоятельно. Заходить на этот сайт в качестве первой защиты от ошибок — очень плохая идея. Вы не научитесь отлаживать. Как вы могли обнаружить эти проблемы без нашей помощи? С вашим компилятором, с инструментом анализа, таким как valgrind, с вашим отладчиком или даже с ручным исполнением вашего кода.

Узнайте, как использовать свой компилятор в своих интересах, включив предупреждения компилятора. GNU и clang будут отлавливать подобные ошибки при оптимизации компиляции и включении соответствующих предупреждений. Узнайте, как использовать отладчик. Узнайте, как вручную выполнить код.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector