解除分配后堆内存会发生什么?

时间:2016-03-25 23:36:43

标签: assembly memory-management heap masm

我正在尝试使用MASM编写汇编程序。我使用GetProcessHeap来获取堆,并使用HeapAlloc和HeapFree来分配和释放堆内存块。我想知道当它们被释放时内存位置会发生什么,假设内存位置还没有被HeapAlloc再次出现?他们是保留旧的价值观,还是在我不知情的情况下被覆盖?

另外,我可以访问释放的内存位置吗?

1 个答案:

答案 0 :(得分:2)

正如Jester所指出的,在释放后访问内存是不安全的。任何事情都可能发生在那段记忆中。特别地,堆管理器可以将其用于其自身目的,或者它可以解除页面以便将存储器返回到OS。在以后的情况下,尝试访问该内存将导致您的程序崩溃。由于您正在讨论默认堆,因此Windows或第三方DLL也可能分配该内存,可能是您未创建的线程异步分配。