首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言陣列越界經典錯誤:下標從 0 開始的血淚教訓

     編輯:程式設計綜合問答

錯誤代碼分析

int array[3][3]; // 合法下標 0~2
for (i = 0; i <= 3; i++) // 錯誤:i 最大為 3,越界
    for (j = 0; j <= 3; j++) // 錯誤:j 最大為 3,越界
        scanf("%d", &array[i][j]);

修正原則

陣列大小 N → 合法下標 0 ~ N-1 → 迴圈條件 i < N(非 <=)。

// 修正後
for (i = 0; i < 3; i++)
    for (j = 0; j < 3; j++)
        scanf("%d", &array[i][j]);

第二個程式同類錯誤

double array[19]; // 大小 19,下標 0~18
for (i = 0; i <= 19; i++) // 錯誤:i=19 越界
    scanf("%lf", &array[i]);

修正:for (i = 0; i < 19; i++) 或宣告 array[20] 配合 i < 20。

防範技巧

  • 編譯器啟用 -Warray-bounds(GCC/Clang)或 /RTCs(MSVC 運行時檢查)
  • 使用靜態分析工具(Cppcheck, Clang Static Analyzer)
  • 習慣寫 for (int i = 0; i < SIZE; ++i),SIZE 為常數/巨集

越界訪問屬未定義行為,輕則輸出亂碼,重則程式崩潰或安全漏洞。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved