2

我想声明一个数组: int a[256][256][256] 程序挂起。(我已经注释掉了所有其他代码......)当我尝试 int a[256][256] 时,它运行正常。

我正在使用 MingW C++ 编译器 Eclipse CDT。

我的代码是: int main(){ int a[256][256][256]; 返回0;}

欢迎任何评论。

4

3 回答 3

10

如果您的数组是函数的本地数组,则可能会发生这种情况。在这种情况下,您需要一个足以容纳 2^24 个整数(2^26 字节或 64 MB)的堆栈大小。

如果您使数组成为全局数组,它应该可以工作。我不确定如何在 Windows 中修改堆栈大小;在 Linux 中,您将使用“ulimit -s 10000”(单位为 KB)。

如果您有充分的理由不使用全局(并发或递归),则可以使用 malloc/free。重要的是要么增加你的堆栈(如果你使用线程,这不是一个好主意),或者获取堆上的数据(malloc/free)或静态数据段(全局)。

理想情况下,您会得到程序终止(核心转储)而不是挂起。我在cygwin中做。

于 2009-08-11T22:26:23.537 回答
0

你想要这样的东西

#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 或其朋友分配数组是要走的路。(如果你必须走那条路,也可以在全局范围内创建它。)

于 2009-08-11T23:35:19.950 回答
0

也许您没有 16MB 的可用连续内存?有点难以想象但可能...

于 2009-08-11T22:25:20.140 回答