e5764.c

境界チェックは先に

/* B:e5764: &&の左側で中身、 右側で境界チェックを行っていますが、逆にしないと範囲外アクセスを招きます */

修正前 const int END = -1; int x[100]; for(int i = 0; x[i] != END && i < 100; i++) /* ↑ NG 右辺で境界チェックを行うと1要素オーバーランする可能性あり */ 修正後 for(int i = 0; i < 100 && x[i] != END; i++)
解説 境界チェックを右辺に書くと、要素の中身をチェックした後に境界をチェックするので、 配列の範囲外にアクセスする可能性がある。