我正在使用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?
但他们没有回答这个问题。
答案 0 :(得分:4)
通常,??
表示未映射进程地址空间的该部分。也就是说,该过程不再使用这些地址。要直接观察此行为,您可以VirtualAlloc
一块内存,在内存窗口中查看,然后VirtualFree
,将其释放回操作系统。
0xfe
标志是一个标记值,调试堆使用该值填充仍由堆拥有的释放内存。如果释放一个非常大的内存块,它很可能会立即释放回操作系统,而不是从堆中返回。