2016-12-08 72 views
0

每當我運行這行C++代碼時,運行時崩潰的程序(彈出一個窗口顯示程序已停止響應)。編譯運行時不會引發異常。爲什麼在C++中這個數組初始化會導致崩潰?

int arr[1000000]; 

我預計該初始化簡單地用百萬一個元素初始化int陣列。之後,我試着初始化一個指向new的指針,指針指向一個1000000個元素int數組內存塊,然後將指針設置爲我將要使用的數組,但失敗了。我怎樣才能成功地初始化這樣一個數組?

我在Windows 10上使用最新版本的MinGW進行編譯。

+4

來指定堆大小的數組,通常需要在堆上進行分配。它在聲明的位置,使用什麼編譯器,在什麼系統上,以及使用什麼選項時都很重要。但一般來說,這樣做的實際方法是使用'std :: vector'。 –

+0

瞭解更多關於[call stacks](https://en.wikipedia.org/wiki/Call_stack)的信息。它們的大小實際上是有限的(在臺式計算機上通常爲一兆字節或幾兆字節),但限制僅限於您的計算機和操作系統。 –

+0

我找到了解決我的問題的辦法,只要問題沒有被擱置,我就會發布答案。 –

回答

1

您正在嘗試分配〜4MB(假設int爲4個字節),該值大於可在堆棧上分配的值。 需要通過new[]運算符

+1

'malloc'在C++答案中是非常好的。 –

+0

@ Cheersandhth.-Alf我沒有看到C++標籤,但我認爲這不是重點......這只是堆棧和堆的知識 – Itsik

+0

@StoryTeller:機器堆棧可能相當有限,取決於編譯器和選項。是的,它可以在32位系統上降至幾MB。 –

相關問題