c++ - delete right child makes parent left pointer point to nullptr -


thank checking question, have basic question on operator "delete", seems can automatically change pointer value nullptr. let me give example this:

    template <typename t>     void tree<t>::remove(const unsigned& index, treenode<t>*& tree)     {         if(tree == nullptr)         {             std::cerr << "remove: can't find target" << std::endl;         }         else if(index < tree->index)         {             remove(index, tree->left);         }         else if(index > tree->index)         {             remove(index, tree->right);         }         else if(index == tree->index)         {             if(tree->degree() == 2)             {                 tree->index = findmin(tree->right)->index;                 tree->value = findmin(tree->right)->value;                 remove(tree->index, tree->right);             }             else             {                 auto oldnode = tree;                 tree = (tree->left != nullptr) ? tree->left: tree->right;                 delete oldnode;     //          oldnode = nullptr;              }         }     } 

the code above classic searching tree remove algorithm. if current tree has 2 nodes root (with key equals 3 example) , right child (with key equals 4 example), when remove node 4, call remove twice , go line:

    delete oldnode; 

and line delete "oldnode", should 4 right now. far knowledge, delete operator free memory address(the address same value of oldnode), means tells os address available again. suppose when print out value of root's right pointer(root->right), should address. when print out 0. question when root->right changed?

hope explain question clearly. may stupid question, let me known if make confusion.

i think seeing use of pointer after delete undefined behavior (until c++14).

for c++14: indirection through pointer became invalid in manner , passing deallocation function (double-delete) undefined behavior. other use implementation-defined.

undefined behavior allows implementation whatever wants pointer after delete (even change value).

it looks implementation sets value of pointer nullptr in delete.


Popular posts from this blog

php - How should I create my API for mobile applications (Needs Authentication) -

5 Reasons to Blog Anonymously (and 5 Reasons Not To)

Google AdWords and AdSense - A Dynamic Small Business Marketing Duo