2014-10-08 72 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