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

C語言經典坑:數組越界導致「Stack around variable corrupted」深度剖析

     編輯:關於C語言

C語言經典坑:數組越界導致「Stack around variable corrupted」深度剖析

現象:運行時拋出 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 元素,掩蓋邏輯錯誤,不推薦

避坑清單

  • 循環邊界:左閉右開 [0, n) 刻入肌肉記憶。
  • 開啟編譯器檢查:/RTC (MSVC)、-fsanitize=address (GCC/Clang)。
  • 靜態分析:Cppcheck、Clang Static Analyzer、Coverity。
  • 代碼規範:MISRA C、CERT C 建議使用 size_t 索引、避免魔術數字。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved