【发布时间】:2015-07-14 01:55:04
【问题描述】:
我想声明一个 2mil 的 unsigned long long 数组。元素。当我第一次定义数组 const 的长度然后定义数组时,我得到一个分段错误错误。但是,当我将长度定义为 unsigned long long 时,声明有效。
int main(int argc, const char *argv[])
{
const unsigned long long lim = 2000000; //If I omit const, it works.
unsigned long long nums2lim[lim];
exit(EXIT_SUCCESS);
}
有人知道为什么会抛出分段错误吗?
【问题讨论】:
-
这看起来不像 C++
-
您的堆栈很可能不够大,无法容纳 200 万个 unsigned long long。
-
局部变量,包括数组,存放在栈中,栈是有限的。在 Windows 上,默认堆栈仅为 1 MB,在 Linux 上为 8 MB。您的数组几乎是 16 MB。
-
“有人知道为什么会抛出分段错误吗?” 很可能是因为 8*2000000 超出了您的可用堆栈大小。
-
如果删除了
const限定符,这些都不能解释为什么声明“有效”(不会出现段错误)。那很有意思。您使用的是什么编译器(gcc、Visual Studio、...)?