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

C++ - Initialisation of empty array of objects sending bad access error

我正在尝试在 main 函数中创建对象 Cell 的数组,

int nc=26 730 899;
Cell c[nc];

并且 Cell 是我正在构造的对象,其中没有参数。

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

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

我正在尝试开发一个程序来解决 运行 使用有限体积方法计算流体动力学问题,其中每个单元格都是一个对象,所以我需要单元格的音调! 在示例 (3D) 中,我只是尝试 x 中的 299 个单元格,y 中的 299 个单元格,z = 26 730 899 中的 299 个单元格,这还很短。

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

我是 c++ 的新手,所以请尽量简单。 :)

谢谢大家

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

Does it mean my computer has no further memory,

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

你没有显示你的完整代码,但你的数组显然有自动存储持续时间。

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

这里重要的是您不应该创建具有自动存储持续时间的大型对象。它不是为此目的而制作的。

and how can work around this issue?

使用动态存储持续时间并将对象放在免费存储区std::vector:

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

[*] 您的代码还使用了不可移植的 GCC 扩展,因为在标准 C++ 中,数组的大小必须在编译时固定,但这对问题来说并不重要在眼前;如果 ncconst.

,你可能会得到同样的错误