2012-06-29 36 views
0

我與Visual Studio 2008的調試運行我使用爲什麼我會看到「??」在HeapFree之後的Visual Studio內存窗口中?

buf = new unsigned char[bigValue];

後來分配一個大的緩衝區(約12MB),當我取消分配使用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

可能與內存被解釋爲char數組(又名字符串)。因此調試器可能試圖打印清楚的非ASCII值。 – jpm

+0

@jpm謝謝,但我不認爲就是這樣。其他(較小的)緩衝區顯示指示釋放的堆分配的「fe ee feee」值。 – Matthew

回答

3

通常,??表示進程地址空間的那部分未映射。也就是說,這些地址不再被該進程使用。要直接觀察這種行爲,你可以在內存窗口中看到它,然後VirtualFree它,將它釋放回OS。

0xfe標誌是一個標記值,調試堆用它填充釋放的仍然由堆擁有的內存。如果您取消分配一塊非常大的內存塊,則可能會立即將其釋放回操作系統,而不是從堆中返回。

+0

謝謝@詹姆斯,這很有道理。並且在「我爲什麼只能看到」的回答「」在0x70000之前的任何地址「我看到的問題。 – Matthew

相關問題