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

VS C++ memset 報錯:函式內大型陣列導致堆疊溢位

     編輯:程式設計綜合問答

在函式內宣告大型陣列 int buffer[MAX][10]; 並呼叫 memset,編譯通過但執行期報「堆疊溢位」。

原因

函式區域變數配置於 堆疊,預設大小通常 1MB~8MB。MAX 過大導致陣列超出堆疊限制,進入函式時即溢位,memset 只是觸發點。

兩種解法

  1. 改為全域/靜態陣列:移至函式外部或加 static,配置於資料段/BSS 段,不受堆疊限制。
    int buffer[MAX][10]; // 全域
    int main() { ... }
  2. 動態配置於堆疊:使用 malloc/new 或 std::vector,記得釋放。
    int (*buffer)[10] = malloc(MAX * sizeof(*buffer));

嵌入式/高效能場景優先靜態配置,通用專案建議 std::vector。

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