我将程序缩减为极短的形式,但异常仍然显示出来。发生了什么事?
#include <iostream>
int main()
{
int array[5000000];
int variable = 0; // here, EXC_BAD_ACCESS
return 0;
}
int的5.000.000元素是否过多?这只是4个字节* 50百万= 20 MB以下。什么......? :P
答案 0 :(得分:3)
正如另一个答案所暗示的,你很可能达到了堆栈限制。对此的解决方案是使用诸如std::vector
之类的容器。
#include <vector>
int main()
{
std::vector<int> array(5000000);
array[100] = 49; // use [] just like an array
int variable = 0;
return 0;
}
现在不应该给你一个运行时错误。
另外,我建议您不要调用变量array
,因为已经有std::array
个类。现在它并没有伤害到你,但你永远不知道未来的编码更改何时或是否会使用std::array
类。
答案 1 :(得分:2)
听起来你在Mac上遇到了堆栈限制问题。您的大型数组已在堆栈上分配,因此当您尝试运行程序时,您将超过OS X上的(某些小的)默认堆栈限制。
https://developer.apple.com/library/Mac/qa/qa1419/_index.html