我试图在C ++中使用声明数组(size = 1,000,000),它给我一个运行时错误。
unsigned long long a[1000000];
但它允许这个(大小= 100,000)
unsigned long long a[100000];
再次给出了
的运行时错误 unsigned long long a[100000];
unsigned long long b[100000];
但我可以做同样的事情
unsigned long long* a = new unsigned long long[1000000];
任何人都可以解释一下这个原因。
答案 0 :(得分:3)
在C ++中,当你这样做时:
unsigned long long a[100000];
它从堆栈中分配内存。堆栈内存有限,因此您无法进行过大的分配。
执行此操作时:
unsigned long long* a = new unsigned long long[1000000];
它从堆中分配内存。堆分配可能很大。
有关堆栈和堆内存的更多信息,请参阅this Stack Overflow post。