我想声明一个数组: int a[256][256][256] 程序挂起。(我已经注释掉了所有其他代码......)当我尝试 int a[256][256] 时,它运行正常。
我正在使用 MingW C++ 编译器 Eclipse CDT。
我的代码是: int main(){ int a[256][256][256]; 返回0;}
欢迎任何评论。
我想声明一个数组: int a[256][256][256] 程序挂起。(我已经注释掉了所有其他代码......)当我尝试 int a[256][256] 时,它运行正常。
我正在使用 MingW C++ 编译器 Eclipse CDT。
我的代码是: int main(){ int a[256][256][256]; 返回0;}
欢迎任何评论。
如果您的数组是函数的本地数组,则可能会发生这种情况。在这种情况下,您需要一个足以容纳 2^24 个整数(2^26 字节或 64 MB)的堆栈大小。
如果您使数组成为全局数组,它应该可以工作。我不确定如何在 Windows 中修改堆栈大小;在 Linux 中,您将使用“ulimit -s 10000”(单位为 KB)。
如果您有充分的理由不使用全局(并发或递归),则可以使用 malloc/free。重要的是要么增加你的堆栈(如果你使用线程,这不是一个好主意),或者获取堆上的数据(malloc/free)或静态数据段(全局)。
理想情况下,您会得到程序终止(核心转储)而不是挂起。我在cygwin中做。
你想要这样的东西
#include <malloc.h>
int main()
{
int *a;
a = (int*)malloc(256*256*256*sizeof(int)); // allocate array space in heap
return 0;
}
否则,你会得到这样的东西:
替代文字 http://bweaver.net/files/stackoverflow1.jpg
因为,正如其他人所指出的,在您的代码中,您在堆栈上分配数组,并将其炸毁。
通过 malloc 或其朋友分配数组是要走的路。(如果你必须走那条路,也可以在全局范围内创建它。)
也许您没有 16MB 的可用连续内存?有点难以想象但可能...