#c #constructor #segmentation-fault
#c #конструктор #ошибка сегментации
Вопрос:
BST() {
root = new BST();
right = NULL;
left = NULL;
};
private:
BST *right, *left;
BST *root;
main:
BST bst1;
Ошибка сегментации: 11
Входит ли конструктор в бесконечный цикл?
Я однажды попробовал статическую переменную для вызова конструктора, но это не сработало. Как с этим справиться?
Комментарии:
1. Да, ваш конструктор бесконечно рекурсивен. Почему должен
root
быть новый экземплярBST
?
Ответ №1:
В этом объявлении
BST bst1;
здесь вызывается конструктор по умолчанию для класса по британскому летнему времени, что внутри себя снова называет себя в настоящем заявлении
root = new BST();
Таким образом, у вас есть бесконечные рекурсивные вызовы конструктора.
Ваш декларации по британскому летнему времени не имеет смысла.
Объявите его, по крайней мере, как
class BST
{
private:
struct Node
{
Node *left = nullptr;
Node *right = nullptr;
// some data member for stored data
} *root = nullptr;
public:
BST() = default;
// other declarations
};
Ответ №2:
Попробуйте установить корень, чтобы nullptr
вместо создания нового объекта по британскому летнему времени. Затем инициализируйте его, когда вам это нужно.