2016-12-08 71 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。 –

相关问题