【问题标题】:Strange runtime exception in C++C ++中奇怪的运行时异常
【发布时间】:2014-08-26 16:45:48
【问题描述】:

我将程序缩减为极短的形式,但仍然出现异常。怎么回事?

#include <iostream>

int main()
{
    int array[5000000];
    int variable = 0;  // here, EXC_BAD_ACCESS
    return 0;
}

5.000.000 个 int 元素太多了吗?这只是 4 字节 * 5000 万 = 不到 20 MB。什么……? :P

【问题讨论】:

  • 你在哪个平台上?首先猜测是堆栈限制问题。
  • 典型的堆栈大小是pretty small
  • 没那么奇怪。您尝试在堆栈上分配 20 兆字节,您认为会发生什么?

标签: c++ runtime


【解决方案1】:

正如其他答案所建议的那样,您很可能会达到堆栈限制。解决此问题的方法是使用 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 类。

【讨论】:

    【解决方案2】:

    听起来您在 Mac 上遇到了堆栈限制问题。您的大数组是在堆栈上分配的,因此当您尝试运行程序时,您会超出 OS X 上的(有些小)默认堆栈限制。

    https://developer.apple.com/library/Mac/qa/qa1419/_index.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      相关资源
      最近更新 更多