如果这是一个基本的问题,或者它是常见的,我道歉 - 我在这里搜索以及在Google上搜索没有运气。
我正在尝试删除二叉树中的节点,但删除操作符似乎什么也没做。
这是我的节点:
struct node {
node(int value) : left(NULL), right(NULL), quantity(1) { val = value; }
int val;
int quantity;
node* left;
node* right;
}
我的测试代码:
node* test = new node(15);
cout<<test<<'\n'; //Outputs memory address
cout<<test->val<<'\n'; //Outputs 15
delete test;
cout<<test<<'\n'; //Outputs same memory address
cout<<test->val<<'\n'; //Outputs 15
非常感谢任何帮助!我偷看了文档,并没有看到任何关于批量内存清理的信息,这些信息会告诉我它将在以后清除。
答案 0 :(得分:2)
删除节点会将该空间标记为可用于重新分配。它不清楚它。旧值将保留在那里,直到它被重新分配并且其新所有者写入它。
在被释放后写入内存是未定义的行为 - 这意味着任何事情都可能发生,其中包括&#34;任何事情&#34;包括&#34;没有任何异常&#34;。
如果您要将其更改为:
delete test;
node* test2 = new node(55);
cout<<test<<'\n'; //Outputs same memory address
cout<<test->val<<'\n'; //Outputs 15
然后你会看到不同的东西。