1

Visual Studio 2008でデバッグしています。を使用して大きなバッファー(約12MB)を割り当てます

buf = new unsigned char[bigValue];

後で、を使用してバッファの割り当てを解除すると、delete[] buf;「?? ??????」と表示されます。デバッグメモリウィンドウの値。普段は「feeefeee」と表示されます。メモリ管理に問題があり、表示されていないことがありますか?

関連する質問がいくつか見つかりました。

なぜ「??」しか見えないのですか?0x70000より前の任意のアドレス

Visual Studio C ++では、メモリ割り当ての表現は何ですか?

しかし、彼らはこの質問に答えません。

4

1 に答える 1

4

通常、は??、プロセスのアドレス空間のその部分がマップされていないことを意味します。つまり、これらのアドレスはプロセスで使用されなくなります。この動作を直接観察するにはVirtualAlloc、メモリのブロックをメモリウィンドウで監視しVirtualFreeてから、OSに解放します。

0xfeフラグは、デバッグヒープが、ヒープによってまだ所有されている解放されたメモリを埋めるための番兵値です。非常に大きなメモリブロックの割り当てを解除すると、ヒープから戻されるのではなく、すぐにOSに解放される可能性があります。

于 2012-06-29T15:45:58.700 に答える