確保していない領域からは未定義の値が返されるため、実行するごとに異なる結果となることがあります。このような場合には配列の境界チェックなど、読み込み先を確認します。
int a[] = { 1,2,3 }; int r1 = a[0] + a[1]; // 3 int r2 = a[2] + a[3]; // -858993457 (0xcccccccf)
Visual C++では初期化せずに定義した領域は0xcで埋められるため、その値から初期化していないことを推測できます。≫メモリ割り当ての既定値
int a;
int *p = &a;
int r = (*p) + 1; // -858993459 (0xcccccccd)