5

我有一个程序问题,我想在 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 版本)。

4

3 回答 3

10

在 C 语言中,您可以在三个地方分配数组:

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

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

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

于 2012-11-22T02:02:00.587 回答
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;
}
于 2012-11-22T02:01:37.390 回答
1

您不一定会假设“意外终止”必然是因为“声明 256x256 数组”而直接导致的。

建议:

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

2)在调试器中运行

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

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

5) 发布您的代码、错误消息和您的回溯

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

于 2012-11-22T01:58:40.613 回答