为什么我看到“??”在HeapFree之后的Visual Studio内存窗口中?

时间:2012-06-29 15:29:08

标签: visual-studio debugging visual-studio-2008 visual-c++

我正在使用Visual Studio 2008进行调试。我使用

分配一个大缓冲区(大约12MB)

buf = new unsigned char[bigValue];

后来当我使用delete[] buf;解除分配缓冲区时,我看到“?? ?? ?? ??”调试内存窗口中的值。通常我会看到“fe ee fe ee”。我的记忆管理出了什么问题,我没有看到?

我发现了几个相关的问题:

Why I can only see “??” at any address before 0x70000

In Visual Studio C++, what are the memory allocation representations?

但他们没有回答这个问题。

1 个答案:

答案 0 :(得分:4)

通常,??表示未映射进程地址空间的该部分。也就是说,该过程不再使用这些地址。要直接观察此行为,您可以VirtualAlloc一块内存,在内存窗口中查看,然后VirtualFree,将其释放回操作系统。

0xfe标志是一个标记值,调试堆使用该值填充仍由堆拥有的释放内存。如果释放一个非常大的内存块,它很可能会立即释放回操作系统,而不是从堆中返回。