現象:運行時拋出 Run-Time Check Failure #2 - Stack around the variable '******' was corrupted.
int intArray[30];
for (i = 1; i <= 30; i++) { // 下標 1~30,共 31 次!
intArray[i] = (rand() % 900) + 100;
}
intArray[30] 合法下標為 0~29,i=30 寫入越界,破壞棧上相鄰變量(如循環計數器、幀指針),觸發 MSVC 的 /RTC 檢測。
| 方案 | 代碼 | 優缺點 |
|---|---|---|
| 修正下標(推薦) | for (i = 0; i < 30; i++) | 零開銷,符合 C 零基址習慣 |
| 擴大數組 | int intArray[31]; 保留 1~30 | 浪費 1 元素,掩蓋邏輯錯誤,不推薦 |
/RTC (MSVC)、-fsanitize=address (GCC/Clang)。size_t 索引、避免魔術數字。