C ++ - 初始化空对象数组,发送错误的访问错误

时间:2017-12-03 11:44:36

标签: c++ arrays object exc-bad-access

我正在尝试在main函数

中创建一个对象Cell数组
int nc=26 730 899;
Cell c[nc];

和Cell是我在没有参数的情况下构建的对象。

// Constructor
Cell::Cell(){};

nc相对较低时,它可以正常工作。问题是它需要大数字,例如示例中的数字,它编译,但检索错误的访问错误。 这是否意味着我的计算机没有更多的内存,这是什么样的内存以及如何解决这个问题?

我正在尝试开发一个使用有限体积法运行计算流体动力学问题的程序,其中每个细胞都是一个物体,所以我需要细胞的音调! 在示例(3D)中,我只是尝试299个单元格中的299个单元格中的299个单元格,而z = 26 730 899中的299个单元格中的299个单元格。

也许我的方法是以错误的方式执行的!?

我对c ++完全陌生,所以请尽量保持简单,请。 :)

谢谢大家。

注意: 我不知道它是否相关,但我从2010年开始在MacBookPro上运行Xcode中的代码。

1 个答案:

答案 0 :(得分:0)

  

这是否意味着我的电脑没有更多内存,

除非另有说明,否则您的编译器会生成可执行程序,其中C ++语言所称的对象的总大小自动存储持续时间受限于对操作系统有意义的操作系统程序应该运行。

您尚未显示完整代码,但您的阵列显然具有自动存储持续时间。

现在,C ++自动存储持续时间通常使用称为堆栈的东西来实现。该堆栈如何工作,如何限制以及如何更改程序的限制都是特定于实现的。

这里重要的是你不应该创建具有自动存储持续时间的巨大对象。它不是出于这个目的。

  

如何解决这个问题?

使用动态存储时长并将对象放在带有std::vector免费商店中:

int nc = 26730899;
std::vector<Cell> c(nc);

[*]您的代码也使用了非可移植的GCC扩展,因为在标准C ++中,数组的大小必须在编译时修复,但这对于手头的问题并不重要;如果ncconst,则可能会出现同样的错误。