Ошибка сегментации конструктора C

#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 вместо создания нового объекта по британскому летнему времени. Затем инициализируйте его, когда вам это нужно.