将数组声明为静态不会使程序崩溃[重复]

问题描述 投票:0回答:3

当我初始化 1,000,000 个整数的数组时,程序崩溃,但是当我将关键字 static 放在前面时,一切正常,为什么?

int a[1000000] <- crash
static int a[1000000] <- runs correctly
c++ arrays
3个回答
3
投票

原因是第一个分配在栈上,没有足够的栈空间容纳它。

第二个位于数据段。

既然您已经标记了问题

[c++]
,我建议您使用
std::vector
而不是数组。


0
投票

当变量是非静态变量时,它被分配在堆栈上。对于 ~4 MB 数组,您可能会遇到堆栈溢出


0
投票

第一个分配在堆栈上,并且您可能已经溢出了堆栈。第二个是在全局/静态内存中分配的,它是在程序启动时分配的。

您还可以使用 malloc/free 或 new/delete,这样它将位于堆上,但是您需要确保它成功。

© www.soinside.com 2019 - 2024. All rights reserved.