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 ++中奇怪的运行时异常的主要内容,如果未能解决你的问题,请参考以下文章
带有布尔参数的 Objective-C 方法中奇怪的“选择器修饰”