Что именно вызывает класс моего узла с вектором, в котором размещены указатели класса, вызывает ошибки сегментации? - PullRequest
0 голосов
/ 17 марта 2020

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

class Node
{ 
private:
   int key_;
   std::vector< Node * > child_;
public:
   Node(int key)
      : key_(key), child_()
   {
   }
   Node * get_child(int key) const
   {
       return child_[key];
   }
};

Ничего особенного, верно?

Внутри основного я вызываю все файлы заголовков и инициализирую все это целиком, как это в моем узле действительно инициализирован. Все, что я делаю в основном, это:

std::cout << node.get_child(0) << std::endl;

Страшная ошибка ошибки сегментации появляется, что означает, что выделение памяти для вектора отключено. Мой вопрос заключается в следующем: если это на самом деле то, что происходит, что в моем коде не так до сих пор? Если это не так, уточните, пожалуйста, что именно в моем классе не так.

1 Ответ

2 голосов
/ 17 марта 2020

В конструкторе для Node вы устанавливаете значение внутреннего ключа и создаете вектор empty . У вас нет показанного кода, который добавляет что-либо к вектору, и попытка получить доступ к элементу 0 пустого вектора приводит к неопределенному поведению (в вашем случае cra sh).

Возможно, вы хотите что-то вроде child(1) (для создания одного узла в векторе), child(key + 1, nullptr) (для создания указателей с нулевыми узлами, чтобы элементы в диапазоне 0..k включались) или al oop в конструкторе для установки фактических узлов в вектор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...