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

C 語言二維數組越界導致 a[0][0] 異常

     編輯:程式設計疑難解答

問題代碼片段

void main() {
    int a[M][N], b[N];  // 錯誤:b 定義為 N
    china(a, b);
    orange(a, b);
}
void china(int a[][N], int b[M]) { // 形參期望 b[M]
    for (i=0; i=N 時寫入越界,覆蓋 a[0][0]
    }
}

錯誤分析

b 實參大小為 N(4),形參期望 M(5)。循環寫入 b[4] 時超出分配空間,因棧上 b 緊鄰 a,導致覆蓋 a[0][0],使其值變大(>100)。

修正方法

將主函數中 b 定義改為 int b[M];,保證實參與形參大小一致,消除越界寫入。

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