我想声明一个数组: int a [256] [256] [256] 程序挂起。 (我已经注释掉所有其他代码...) 当我尝试int [256] [256]时,它运行正常。C++中的多维数组挂起
我正在使用MingW C++编译器Eclipse CDT。
我的代码是: int main(){ int a [256] [256] [256]; return 0; }
欢迎任何评论。
我想声明一个数组: int a [256] [256] [256] 程序挂起。 (我已经注释掉所有其他代码...) 当我尝试int [256] [256]时,它运行正常。C++中的多维数组挂起
我正在使用MingW C++编译器Eclipse CDT。
我的代码是: int main(){ int a [256] [256] [256]; return 0; }
欢迎任何评论。
这可能会发生,如果你的数组本地功能。在这种情况下,你需要一个足够容纳2^24个整数(2^26个字节或64 MB)的堆栈大小。
如果你让这个数组成为全局数组,它应该可以工作。我不确定如何在Windows中修改堆栈大小;在Linux中,你会使用“ulimit -s 10000”(单位是KB)。
如果您有充分的理由不使用全局(并发或递归),您可以使用malloc/free。重要的是要么增加你的堆栈(如果你使用线程不是一个好主意),或者获得堆(malloc/free)或静态数据段(全局)上的数据。
理想情况下,你会得到程序终止(核心转储)而不是挂起。我在cygwin做。
+1,打我吧!如果这确实是问题,那么使用malloc或new []从堆中分配内存也可以解决问题。 – 2009-08-11 22:30:23
尝试从堆栈中吃掉64MB很可能是一个问题,确实是+1。 – 2009-08-11 22:31:26
也许你没有16MB的自由连续内存?很难想象,但可能...
@bkritzer:64MB;整数是4个字节。 8-) – RichieHindle 2009-08-11 22:26:42
哎呀,没有注意到“int”部分。 – bkritzer 2009-08-11 22:29:42
你想是这样的
#include <malloc.h>
int main()
{
int *a;
a = (int*)malloc(256*256*256*sizeof(int)); // allocate array space in heap
return 0;
}
否则,你得到的东西是这样的:
alt text http://bweaver.net/files/stackoverflow1.jpg
因为,正如其他人所指出的,在你的代码你分配的数组在堆叠上,然后吹起来。
通过malloc或其朋友分配数组是最好的选择。 (如果你必须走这条路线,全球创建也是可行的。)
你是什么意思“注释掉所有其他代码”?你的意思是说,一个由单行'int a [256] [256] [256]'和空主方法'int main(){}'组成的程序挂起? – 2009-08-11 22:21:32
欢迎使用实际的代码。 – Alex 2009-08-11 22:21:51
256 * 256 * 256是1600万个元素;您的阵列在32位系统上是64兆字节。对于现代系统来说不是不合理的,但是如果你在堆栈上(在函数内部)分配,它可能比你的编译器和操作系统期望的要大。 – 2009-08-11 22:26:15