2012-02-19 84 views
1

崩潰我有這樣的代碼:無法弄清楚,爲什麼程序是用C

#include <stdio.h> 
#include <math.h> 

#define gridSize 400 
void main() { 
    float grid[gridSize][gridSize]; 
    short height[gridSize][gridSize]; 
    short power[gridSize][gridSize];  
} 

我使用Visual Studio 2010,該方案似乎當我運行它瞬間崩潰。但是,此代碼:

#include <stdio.h> 
#include <math.h> 

#define gridSize 400 
void main() { 
    float grid[gridSize][gridSize]; 
    short height[gridSize][gridSize]; 
    //short power[gridSize][gridSize]; 
} 

似乎工作正常,程序不會崩潰。可能是什麼問題呢?

+4

StackOverflow上的堆棧溢出。 :) – Mysticial 2012-02-19 06:05:50

+0

每個陣列有160k個元素,因此總大小爲8 * 160kB = 1.28 MB。這對於堆棧來說相當大 - 顯然太大了! – 2012-02-19 06:11:25

回答

3

這裏gridheightpowerauto variable並打算在stack存儲。
在任何Os中,每個進程都有一些固定的默認大小堆棧。

在這裏,您在堆棧上分配了太多的數據,因此進程沒有其他內存留在堆棧上進行其他操作。所以它崩潰

你有兩個選擇

1>增加堆棧大小,這個過程

在Linux上使用gcc,你可以通過

–stack 16777216 

增加它在海灣合作委員會的命令添加此

2>您可以使用malloc將此數據存儲在堆部分。

2

您正在分配太多堆棧。改爲將一個或多個移入堆。

0

剛剛閱讀本網站的名稱,堆棧溢出。 您可以: 1,將這三個數組移出主函數(也許如果初始化這些數組,您將在編譯後得到一個大的.exe文件)。 或 2,使用malloc()。

相關問題