为什么248×248是我可以声明的最大二维数组大小?
我有一个程序问题,我想在C中声明一个256×256数组。不幸的是,我每次尝试声明一个大小的数组(整数)并运行我的程序时,它意外终止。 有什么建议? 我没有尝试过内存分配,因为我似乎无法理解它如何与多维数组一起工作(尽管我是C的新手,随时引导我完成它)。 另一个有趣的事情是我可以在C中声明一个248x248arrays没有任何问题,但没有更大的问题。
dims = 256; int majormatrix[dims][dims];
编译:
gcc -msse2 -O3 -march=pentium4 -malign-double -funroll-loops -pipe -fomit-frame-pointer -W -Wall -o "SkyFall.exe" "SkyFall.c"
我正在使用SciTE 323(不知道如何检查GCC版本)。
在C中有三个可以分配数组的地方:
- 在自动存储器中(通常称为“在堆栈上”)
- 在动态内存(
malloc
/free
)中,或者 - 在静态内存(
static
关键字/全局空间)中。
只有自动存储器对分配量有一些严格的限制(即,除了操作系统设置的限制外); 动态和静态分配可能会占用操作系统为您的进程提供的空间。
查看是否是这种情况的最简单方法是将声明移到函数之外。 这会将您的数组移动到静态内存。 如果崩溃继续,则它们与arrays的大小无关。
除非您运行的是非常旧的机器/编译器,否则没有理由应该太大。 在我看来,问题出在其他地方。 尝试以下代码并告诉我它是否有效:
#include int main() { int ints[256][256], i, j; i = j = 0; while (i<256) { while (j<256) { ints[i][j] = i*j; j++; } i++; j = 0; } printf("Made it :) \n"); return 0; }
您不一定会认为“意外终止”必然是因为“声明256x256arrays”。
建议:
1)将代码简化为一个简单的独立示例
2)在调试器中运行它
3)当它“意外终止”时,使用调试器获得“堆栈追溯” – 您必须确定失败的特定行
4)您还应该查找特定的错误消息(如果可能)
5)发布您的代码,错误消息和您的追溯
6)一定要告诉我们你正在使用的平台(例如Centos Linux 5.5)和编译器(例如gcc 4.2.1)。