區域宣告 int a[1000][1000] 需約 4MB 棧空間,超過預設堆疊大小(Windows 1MB、Linux 8MB),導致執行時期崩潰。
int a[1000][1000]; // Stack overflow
int rows = 1000, cols = 1000;
int **a = (int**)malloc(rows * sizeof(int*));
for (int i = 0; i < rows; i++) {
a[i] = (int*)malloc(cols * sizeof(int));
}
// 使用 a[i][j] ...
// 釋放
for (int i = 0; i < rows; i++) free(a[i]);
free(a);
int *flat = (int*)malloc(rows * cols * sizeof(int));
#define IDX(i,j) flat[(i)*cols + (j)]
IDX(0,0) = 1;
// 釋放 free(flat);
int a[n][m],但仍分配於堆疊,大陣列同樣危險。