删除什么都不做?

时间:2014-08-01 20:46:38

标签: c++ memory

如果这是一个基本的问题,或者它是常见的,我道歉 - 我在这里搜索以及在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

非常感谢任何帮助!我偷看了文档,并没有看到任何关于批量内存清理的信息,这些信息会告诉我它将在以后清除。

1 个答案:

答案 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

然后你会看到不同的东西。