【问题标题】:Why do I see "??" in Visual Studio Memory window after HeapFree?为什么我看到“??”在 HeapFree 之后的 Visual Studio 内存窗口中?
【发布时间】:2012-07-01 03:40:36
【问题描述】:

我正在使用 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?

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

【问题讨论】:

  • 可能与被解释为chars(又名字符串)数组的内存有关。因此,调试器可能会尝试清楚地打印非 ascii 值。
  • @jpm 谢谢,但我不这么认为。其他(较小的)缓冲区显示“fe ee fe ee”值,指示已释放的堆分配。

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


【解决方案1】:

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

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

【讨论】:

  • 谢谢@James,这是有道理的。并附上“为什么我只能看到”??在我看到的 0x70000" 问题之前的任何地址。
猜你喜欢
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
相关资源
最近更新 更多