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

C++ C++;-初始化发送错误访问错误的空对象数组,c++,arrays,object,exc-bad-access,C++,Arrays,Object,Exc Bad Access,我试图在main函数中创建一个对象单元格数组 int nc=26 730 899; Cell c[nc]; Cell是一个我正在构造的没有参数的对象 // Constructor Cell::Cell(){}; 当nc相对较低时,它工作正常。问题是当它需要大的数字时,比如示例中的那个,它在那里编译,但检索到错误的访问错误。 这是否意味着我的电脑没有更多的内存,这是什么类型的内存,如何解决这个问题 我正试图开发一个程序来运行计算流体力学问题使用有限体积法,其中每个细胞是一个对象,所以我需要细胞

我试图在
main
函数中创建一个对象单元格数组

int nc=26 730 899;
Cell c[nc];
Cell是一个我正在构造的没有参数的对象

// Constructor
Cell::Cell(){};
nc
相对较低时,它工作正常。问题是当它需要大的数字时,比如示例中的那个,它在那里编译,但检索到错误的访问错误。 这是否意味着我的电脑没有更多的内存,这是什么类型的内存,如何解决这个问题

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

也许我的方法是错误的

我对C++完全陌生,所以请尽量保持简单,请注意:p> 谢谢大家

注: 我不知道这是否相关,但我从2010年开始在MacBookPro上用Xcode运行代码

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

<>你的编译器除非被告知否则,就会产生可执行程序,其中C++语言调用的对象的总大小限制自动存储持续时间以一种对程序运行的操作系统来说是有意义的方式限制。 您尚未显示完整的代码,但您的阵列显然具有自动存储持续时间

<>现在,C++自动存储持续时间通常用栈来实现。堆栈是如何工作的,它是如何受到限制的,以及您可以如何更改程序的这些限制,这些都是特定于实现的

这里重要的是,您不应该创建具有自动存储持续时间的大型对象。它不是为那个目的做的

如何解决这个问题

使用动态存储持续时间并使用
std::vector

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


[*]你的代码也使用了一个不可移植的GCC扩展,因为在标准C++中,数组的大小必须在编译时固定,但是对于手头的问题来说,这并不重要。如果

nc
const

这是一个可变长度数组,则可能会出现相同的错误。它不是标准C++,而是一个扩展。您不应该使用它的原因之一是,大型VLA将在短时间内耗尽可用的堆栈内存。改为使用
std::vector
。看起来您试图在堆栈上存储大数组,并面临堆栈溢出。您应该在堆上分配大型数组或利用相应的库容器-
std::vector
。从简单的程序开始,比如hello world程序。然后一步一步地增加复杂性。