{
T value;
Node<T>* parent = nullptr;
Node<T>* left = nullptr;
Node<T>* right = nullptr;
};
И есть такой тест:
Node<int>* a = new Node<int>{5, nullptr, nullptr, nullptr};
a->left = new Node<int>{7, a, nullptr, nullptr};
Heap<int>::swap(a->left, a);
своп меняет два узла в куче местами
void swap(Node<T>* &a, Node<T>* &b) {
auto tmpLeft = a->left;
auto tmpRight = a->right;
a->parent = b->parent; //после этой строчки b == nullptr
a->left = b;
a->right = b->right;
a->parent->left = a;
b->parent = a;
b->left = tmpLeft;
b->right = tmpRight;
}
На указанной строчке b становиться null (и дальше, понятное дело, приложение падает), хотя эта строчка никак не трогает b. Как такое может быть? Я категорически не понимаю, что происходит
а менее извращенных версий нельзя?
Обсуждают сегодня