C ++中的奇怪运行时异常

时间:2014-08-26 16:45:48

标签: c++ runtime

我将程序缩减为极短的形式,但异常仍然显示出来。发生了什么事?

#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

2 个答案:

答案 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