Как проверить правильность общего указателя в классе? - PullRequest
0 голосов
/ 10 октября 2018

Почему проверка достоверности корня приводит к ошибке сегментации и как правильно проверить, равен ли указатель нулю?

class Node {  
public:
  int key, value;
  std::shared_ptr<Node> right, left;
  Node(int key, int value) : key(key), value(value) {
    right = nullptr;
    left = nullptr;
  }
};

class BST {
private:
  std::shared_ptr<Node> root = nullptr;
public:
  void addElement(int key, int value) {  
    if (root) {
    }
  }
};

int main() {
  std::shared_ptr<BST> bst;
  bst->addElement(10, 10);
}

1 Ответ

0 голосов
/ 10 октября 2018

Вы забыли создать экземпляр своего класса BST в main (),

bst->addElement(10, 10);

вызывает addElement по нулевому указателю, откуда и происходит segfault.Вместо этого

auto bst = std::make_shared<BST>();
bst->addElement(10, 10);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...