初級 › 配列の添字を1つずらしてしまうoff-by-oneバグ › パターン2
配列の添字を1つずらしてしまうoff-by-oneバグ
配列の要素数と添字の範囲を混同し、ループの開始や終了条件を1つずらしてしまうバグです。
1 #include <iostream> 2 int main() { 3 int prices[4] = {10, 20, 30, 40}; 4 int total = 0; 5 for (int i = 0; i < _; i++) { ^ 6 total += prices[i]; 7 } 8 std::cout << total << std::endl; 9 return 0; 10 }
出力: 60期待: 100
空欄を埋めてコンパイル・実行を通す
要素数4の配列なのに境界をi<3にすると、最後の要素(40)が合計に含まれません。有効な添字は0〜3までなので、境界には要素数そのものを使います。
次の問題