0

VS 2010 を使用しています。既にメモリ リークを分析しています。実行中にコンパイルされたコードが境界チェックを行っているかどうかを知りたいです。これが C++ で作成されたベクトルと配列で発生することはかなり確信しています。私が知らないのは、 mallocの呼び出しまたはnewキーワードを使用して作成されたオブジェクトに境界チェックが適用されるかどうかです。VS がそのような場合の境界チェックを行わない場合、それを行うサードパーティの機能はありますか?

4

2 に答える 2

2

デバッグ CRT ヒープは、新しいメモリ ブロックの周りに "オーバーラン バッファー" を割り当て、ブロックが解放されるときに期待値 (0xFD) のバッファーをチェックします。オーバーラン バッファーに予期しない値が含まれている場合、CRT ランタイム チェックの失敗ダイアログが表示されます。これにより、オーバーラン書き込みはキャッチされますが、読み取りはキャッチされません。残念ながら、プロセスが読み取られているページにアクセスできる場合、範囲外の読み取りをキャッチする良い方法はありません。

詳細については、「メモリ管理とデバッグ ヒープ」および「_CrtSetDbgFlag 」を参照してください。

于 2013-02-07T01:30:20.283 に答える
0

配列は、静的に割り当てられているか動的に割り当てられているかに関係なく、C++ ではデフォルトで境界チェックされません。これには、Visual C++ でBoundsCheckerを使用していました。Linux には valgrind もありますが、これは便利です。

于 2013-02-07T01:30:15.800 に答える