1. ホーム
  2. デバッギング

[解決済み】Visual Studio C++で、メモリ割り当ての表現とは何ですか?

2022-04-05 10:15:49

質問

Visual Studioで、実行中にC++のデバッガで変数を検査する際に、"baadf00d"や"CC"、"CD"を見たことがあると思います。

私の理解では、"CC" は DEBUG モードでは、メモリが new() または alloc() されてユニット化されたときにのみ表示されます。 一方、"CD" は削除されたメモリや解放されたメモリを表します。 RELEASEビルドでは"baadf00d"しか見たことがありません(でも間違っているかもしれません)。

たまに、メモリリークやバッファオーバーフローなどを仕掛ける状況になると、こういった情報が役に立ちます。

デバッグのために、いつ、どのようなモードで、メモリが認識可能なバイトパターンに設定されているのか、どなたか親切に教えていただけませんか?

解決するには?

こちらのリンクに詳細があります。

https://en.wikipedia.org/wiki/Magic_number_(プログラミング)#Debug_values

* 0xABABAB : Microsoft の HeapAlloc() で、ヒープメモリを割り当てた後のガードバイトをマークするために使用されます。
* 0xABADCAFE : この値で起動すると、すべての空きメモリが初期化され、不正なポインタをキャッチできます。
* 0xBAADF00D : Microsoft の LocalAlloc(LMEM_FIXED) が、初期化されていないヒープメモリをマークするために使用します。
* 0xBADCAB1E : デバッガとの接続が切断されたとき、Microsoft eVCデバッガに返されるエラーコード。
* 0xBEEFCACE : Microsoft .NET がリソースファイルのマジックナンバーとして使用する。
* 0xCCCCCC : MicrosoftのC++デバッグランタイムライブラリが、初期化されていないスタックメモリーをマークするために使用します。
* 0xCDCDCD : MicrosoftのC++デバッグ用ランタイムライブラリが、初期化されていないヒープメモリをマークするために使用します。
* 0xDDDDDD : Microsoft の C++ デバッグヒープが、解放されたヒープメモリをマークするために使用します。
* 0xDEADDEAD : Microsoft Windows の STOP エラーコードで、ユーザーが手動でクラッシュを開始したときに使用される。
* 0xFDFDFD : マイクロソフトのC++デバッグヒープが、割り当てられたヒープメモリの前後に、quot; no man's land;ガードバイトをマークするために使用されます。
* 0xFEEEFEEE : マイクロソフトのHeapFree()が、解放されたヒープメモリをマークするために使用します。