我正在尝试使用MASM编写汇编程序。我使用GetProcessHeap来获取堆,并使用HeapAlloc和HeapFree来分配和释放堆内存块。我想知道当它们被释放时内存位置会发生什么,假设内存位置还没有被HeapAlloc再次出现?他们是保留旧的价值观,还是在我不知情的情况下被覆盖?
另外,我可以访问释放的内存位置吗?
答案 0 :(得分:2)
正如Jester所指出的,在释放后访问内存是不安全的。任何事情都可能发生在那段记忆中。特别地,堆管理器可以将其用于其自身目的,或者它可以解除页面以便将存储器返回到OS。在以后的情况下,尝试访问该内存将导致您的程序崩溃。由于您正在讨论默认堆,因此Windows或第三方DLL也可能分配该内存,可能是您未创建的线程异步分配。