C ++内存释放(在解除分配后仍可访问旧值)

时间:2015-03-19 18:27:16

标签: c++

以下代码应该释放" num1"的动态内存。删除声明后。我知道它仍然会保留内存地址,但我不明白的是为什么旧值" 5"还在那里?

抱歉,我还是编程新手,希望你们能帮助我。 谢谢:)

enter image description here

2 个答案:

答案 0 :(得分:2)

删除变量对内存没有任何作用。它只是对操作系统说“我现在已经完成了使用这个内存空间,你可以自由使用它。”

老实说,打印free'd变量是未定义的行为,你永远不知道会发生什么。一小时后尝试运行相同的程序,它可能会打印出垃圾甚至崩溃。

答案 1 :(得分:1)

这是未定义的行为。 发生在该内存地址处具有相同的值。但如果您稍后检查,则该值可能会更改。如果你delete一个对象,那么该地址的值将不会被重置"零,或类似的东西。它只会保留它的最后一个值,直到某个其他对象占用该内存并在那里写入值。

您未分配的地址的值未定义,期限。