繁体   English   中英

C ++中的多维数组挂起

[英]multidimensional array in C++ hang

我想声明一个数组:int a [256] [256] [256]并且程序挂起。 (我已经注释掉了所有其他代码...)当我尝试[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做。

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

你想要这样的东西

#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或其朋友分配数组是可行的方法。 (如果你必须走这条路线,那么全球创建它也会起作用。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM