首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言經典陷阱:一個「=」號引發的死循環與數組越界

     編輯:關於C語言

C語言經典陷阱:一個「=」號引發的死循環與數組越界

代碼對比:

版本 1(死循環 + 越界)

for (i = 0; i <= 10; i++) {
    printf("你好聰明\n");
    arr[i] = 0;   // i=10 時訪問 arr[10] 越界
}

arr[10] 正好覆蓋棧上 i 的存儲位置(典型棧佈局:arr[0..9] 後緊跟 i),將 i 置 0,導致循環條件 i <= 10 永真 → 死循環。

版本 2(修正)

for (i = 0; i < 10; i++) {  // <= 改為 <
    printf("你好聰明\n");
    arr[i] = 0;
}

輸出 10 次後正常結束。

深度剖析

  • 棧內存佈局:局部變量在棧上相鄰分配,arr[10] 與 i 相鄰是編譯器常見優化,非標準保證。
  • 未定義行為:數組越界屬 UB,可能修改任意內存、崩潰、或看似正常運行。
  • 防範措施:
    • 循環條件嚴格用 < size。
    • 開啟編譯器檢查(-Wall -Wextra -fsanitize=address)。
    • 使用 std::array/vector(C++)或靜態分析工具。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved