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

VS2015 C++ 堆棧溢出:巨大結構體數組導致運行崩潰

     編輯:程式設計疑難解答

錯誤代碼

#define MAXSIZE 100
typedef struct {
    Triple data[MAXSIZE + 1]; // 假設 Triple 較大
    int mu, nu, tu;
} TSMatrix;

TSMatrix m; // 棧上分配,超過默認 1MB 棧限制

原因

`MAXSIZE=100` 且 `Triple` 可能包含多個 `int/double`,結構體大小超過棧空間,導致 **Stack Overflow**,調試器無法進入函數即崩潰。

解決方法

  1. 動態分配 (堆):
    `TSMatrix *m = (TSMatrix*)malloc(sizeof(TSMatrix));` 或 `new TSMatrix();` 使用後 `free`/`delete`。
  2. 靜態/全局變量:移至函數外部,存儲在數據段。
  3. 增大棧大小:項目屬性 → Linker → System → Stack Reserve Size (如 10MB),但治標不治本。

最佳實踐

大對象、大數組**絕對不要**放在棧上,優先用 `std::vector`、`std::unique_ptr` 管理堆內存。

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