この記事のポイント

  • 配列アクセス越境防止をレビューアーが読み解く技術を整理
  • 境界チェック設計の有無を静的に評価するレビュー観点を整理
  • 標準コンテナ移行設計と組み合わせた安全設計レビュー技法を解説

そもそも配列越境アクセスとは

C++における配列は境界チェックを行わないため、
インデックスが範囲外でもアクセスできてしまう危険な構造です。

int data[5];
data[10] = 42;  // 越境アクセス(未定義動作)
越境発生の原因典型例
  • サイズ計算ミス
  • ループ境界ミス
  • 外部入力インデックス未検証
  • 動的確保配列の誤利用

レビューアーは
「設計段階で越境が起こりえない構造になっているか?」
を読み解く役割を持ちます。

なぜこれをレビューするのか

配列越境はC++バグの最も危険な要因のひとつです。

  • 不定動作
  • メモリ破壊
  • セキュリティ脆弱性
  • 再現性の低い断続クラッシュ

レビュー段階で
そもそも越境自体が構造的に起こらない設計になっているか
を確認できることが品質を決定します。

レビューアー視点

  • 標準コンテナ移行で境界保証できているか
  • サイズ計算が一元化されているか
  • 外部入力インデックス検証が組み込まれているか
  • 非標準配列利用時は責務集中して管理されているか
  • 動的確保配列を極力回避できているか

開発者視点

  • vector, array, string使用を優先
  • サイズ管理を構造に埋め込む
  • 動的確保は標準コンテナへ吸収
  • 独自生配列使用時はサイズ責務明示化
  • インデックス取得経路は契約化

良い実装例

想定:標準vector統合設計

良い設計例
#include <vector>
#include <iostream>

void process() {
    std::vector<int> data = {1, 2, 3, 4, 5};

    for (size_t i = 0; i < data.size(); ++i) {
        std::cout << data[i] << std::endl;
    }
}

良いポイント

  • vector利用によりサイズ情報が構造に組込済
  • 越境防止が自然保証
  • 動的拡張/縮小も安全

レビュー観点

  • 標準コンテナ利用でサイズ管理が構造化されているか
  • インデックス計算がループ条件内に統合されているか
  • 動的配列残存時は管理責務が集中されているか
  • 入力インデックス検証責務が設計統合されているか
  • 例外安全性も含めて越境事故が構造上消滅しているか

良くない実装例: ケース1(生配列の静的越境)

問題例①
void process() {
    int data[5] = {1, 2, 3, 4, 5};

    for (int i = 0; i <= 5; ++i) {  // <=が誤り
        std::cout << data[i] << std::endl;
    }
}
@Reviewer
ループ境界ミスにより配列越境が発生します。標準vectorへ移行し、サイズ統治を構造吸収してください。

改善例

改善例①
std::vector<int> data = {1, 2, 3, 4, 5};
for (size_t i = 0; i < data.size(); ++i) { ... }

良くない実装例: ケース2(外部インデックス未検証)

問題例②
void access(int index) {
    int data[5] = {1, 2, 3, 4, 5};
    std::cout << data[index] << std::endl;
}
@Reviewer
index検証が欠落し越境可能性があります。境界チェック責務を呼び出し側or内部設計に統合してください。

改善例

改善例②
if (index >= 0 && index < 5) { std::cout << data[index] << std::endl; }

良くない実装例: ケース3(動的配列生裸利用)

問題例③
void process() {
    int* data = new int[5];
    data[5] = 42;  // 越境
    delete[] data;
}
@Reviewer
動的裸配列は越境検出困難になります。vector利用へ全面移行してください。

改善例

改善例③
std::vector<int> data(5);
data[4] = 42;

観点チェックリスト


まとめ

配列越境レビューは
「境界違反が静的に発生しえない構造設計になっているかを確認するレビュー」です。

レビューアーは常に

  • 生裸配列を標準コンテナに吸収できないか?
  • ループ条件式が安全型になっているか?
  • 外部入力インデックスの検証責務が存在するか?

を読み解き、境界保証が構造統治される設計へ誘導するのが役割です。

UML Diagram