ホームページ > バックエンド開発 > C++ > C で `std::vector` の境界チェックを有効または無効にするにはどうすればよいですか?

C で `std::vector` の境界チェックを有効または無効にするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-28 09:30:29
オリジナル
896 人が閲覧しました

How can I enable and disable bounds checking for `std::vector` in C  ?

C Vector での配列アクセスの境界チェックのためのコンパイラ オプション

C 標準ライブラリは、std::vector 型、つまり動的配列を提供します。メモリの安全性を確保します。ただし、operator[] を使用して要素にアクセスすると、インデックスが範囲外の場合に未定義の動作が発生するという固有のリスクが伴います。

デバッグ モードで境界チェックを有効にする

境界を有効にするにはVisual Studio で Operator[] をチェックすると、マクロ _SECURE_SCL がゼロ以外の値に定義されている可能性があります。これにより、実行時に範囲チェックが強制され、無効なインデックスにアクセスすると std::out_of_range 例外が発生します。

リリース モードで境界チェックを無効にする

パフォーマンスを最適化するにはリリース ビルドでは、_SECURE_SCL を 0 に設定することで境界チェックを無効にできます。これにより、範囲検証に関連する実行時のオーバーヘッドが排除されます。

例:

<code class="cpp">// Enable bounds checking in debug mode (assuming Visual Studio 2008 or earlier)
#ifdef _DEBUG
#define _SECURE_SCL 1
#endif

// ...
std::vector<std::vector<int>> v;
v[0][1]; // Throws `std::out_of_range` if i or j is out of bounds</code>
ログイン後にコピー

注:

  • Visual Studio 2005 および 2008 では、デバッグ ビルドとリリース ビルドの両方で境界チェックがデフォルトで有効になっています。
  • Visual Studio 2010 以降では、境界チェックがデフォルトで有効になっていますデバッグ ビルドでは有効ですが、リリース ビルドでは無効になります。マクロ _ITERATOR_DEBUG_LEVEL は、この動作を制御します。

以上がC で `std::vector` の境界チェックを有効または無効にするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート