2014-10-08 68 views
0

像這樣的事情會引發錯誤:錯誤聲明時,當地陣列

using namespace std; 


int main() 
{ 
    int test[1000000] = {}; 
} 

像這樣的東西並不:

using namespace std; 

int test[1000000] = {}; 

int main() 
{ 
} 

這是爲什麼?百萬英鎊的記錄要求過高。

回答

5

第一個在堆棧上分配空間。第二個在編譯/鏈接時分配數據段中的空間。該堆棧的大小有限。

0

堆棧不是動態的,但你也可以做到這一點

int* arr = new int[1000000]; 

但不要忘記刪除它,因爲這個聲明數組是動態內存堆和從堆刪除它您就可以阻止內存泄漏。

例子:

delete arr; 

這僅僅是替代如何使用內存

+2

這是相當旁邊的問題。 – Deduplicator 2014-10-08 18:16:45

+0

@Deduplicator我不同意。這從堆而不是棧中分配數組,解決了OP的錯誤。 – 2014-10-08 18:26:13

+1

@DavidLively這就是爲什麼它除了重點。問題不是「我該如何解決」,而是「爲什麼會發生這種情況」。這*完全沒有辦法解釋爲什麼堆棧分配失敗。 – Borgleader 2014-10-08 18:30:43