程式碼宣告 int iArray[3][4];,合法索引範圍為 [0..2][0..3]。但程式直接對 iArray[3][4] = 1000; 賦值並輸出,結果竟正常印出 1000,令人困惑。
C 標準規定:存取陣列越界屬於未定義行為。此處之所以「看似正常」,是因為:
base + (3*4 + 4)*sizeof(int) 寫入記憶體。「能跑」不代表「正確」。永遠不要依賴越界存取,開啟編譯器警告(-Wall -Wextra)並使用 AddressSanitizer(-fsanitize=address)偵測此類錯誤。