为什么248x248是我可以声明的最大二维数组大小?

时间:2012-11-22 01:49:00

标签: c arrays multidimensional-array integer

我有一个程序问题,我想在C中声明一个256x256数组。不幸的是,我每次尝试声明一个大小的数组(整数)并运行我的程序时,它意外终止。有什么建议?我没有尝试过内存分配,因为我似乎无法理解它如何与多维数组一起工作(尽管我是C的新手,随时引导我完成它)。另一个有趣的事情是我可以在C中声​​明一个248x248阵列没有任何问题,但没有更大的。

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版本)。

3 个答案:

答案 0 :(得分:10)

有三个地方可以在C中分配数组:

  • 自动内存中(通常称为“在堆栈上”)
  • 动态内存中{malloc / free)或
  • 静态内存(static关键字/全局空间)中。

只有自动内存对分配量有一些严格的限制(即,除了操作系统设置的限制外);动态和静态分配可能会占用操作系统为您的进程提供的空间。

查看是否是这种情况的最简单方法是将声明移到函数之外。这会将您的数组移动到静态内存。如果崩溃继续,则它们与阵列的大小无关。

答案 1 :(得分:2)

除非您运行的是非常旧的机器/编译器,否则没有理由认为它太大了。在我看来,问题出在其他地方。尝试以下代码并告诉我它是否有效:

#include <stdio.h>

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;
}

答案 2 :(得分:1)

您不一定认为“意外终止”必然是因为“声明256x256阵列”。

建议:

1)将您的代码简化为一个简单的独立示例

2)在调试器中运行它

3)当它“意外终止”时,使用调试器获得“堆栈追溯” - 您必须识别失败的特定行

4)您还应该查找特定的错误消息(如果可能)

5)发布您的代码,错误消息和追溯

6)请务必告诉我们您正在使用的平台(例如Centos Linux 5.5)和编译器(例如gcc 4.2.1)。