1

我正在使用 Visual Studio 2008 进行调试。我使用分配了一个大缓冲区(大约 12MB)

buf = new unsigned char[bigValue];

稍后当我使用 释放缓冲区时delete[] buf;,我看到“?? ?? ?? ??” 调试内存窗口中的值。通常我会看到“fe ee fe ee”。我的内存管理是否出现了我没有看到的问题?

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

为什么我只能看到“??” 在 0x70000 之前的任何地址

在 Visual Studio C++ 中,内存分配表示形式是什么?

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

4

1 回答 1

4

通常,这??意味着进程地址空间的那部分没有被映射。也就是说,这些地址不再被进程使用。要直接观察这种行为,您可以VirtualAlloc使用一块内存,在“内存”窗口中观察它,然后VirtualFree将其释放回操作系统。

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

于 2012-06-29T15:45:58.700 回答