【发布时间】:2013-04-29 01:11:10
【问题描述】:
以下代码给了我一个分段错误:
bool primeNums[100000000]; // index corresponds to number, t = prime, f = not prime
for (int i = 0; i < 100000000; ++i)
{
primeNums[i] = false;
}
但是,如果我将数组声明更改为动态:
bool *primeNums = new bool[100000000];
我没有遇到段错误。我对这是为什么有一个大致的了解:在第一个示例中,内存被放在堆栈上,而在动态情况下,它被放在堆上。
你能详细解释一下吗?
【问题讨论】:
-
您已经指出了很大一部分原因。另一部分是,在典型情况下,堆栈大小相对有限——几兆字节左右。