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

Posted

技术标签:

【中文标题】C ++中奇怪的运行时异常【英文标题】:Strange runtime exception in 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 兆字节,您认为会发生什么? 【参考方案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

【讨论】:

以上是关于C ++中奇怪的运行时异常的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net 应用程序中奇怪的 GAC 错误

带有布尔参数的 Objective-C 方法中奇怪的“选择器修饰”

使用 LibGdx 在 Java 中奇怪的 CPU 使用率

我的响应时间线中奇怪的随机时段/点

Bootstrap 中奇怪的 CSS 效果。在容器 div 内显示大量内容 div 时无意缩进

Chrome中奇怪的document.cookie行为[重复]