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

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

最佳答案

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

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

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

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

关于c - 为什么 248x248 是我可以声明的最大二维数组大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13504807/

相关文章:

java - 如何将下一个数组项设置为变量的新值?

php - 在php中将字符串转换为数组

c++ - 获取和设置二维数组对象值 (C++)

c - C中的多维数组初始化

c - 在c中写入文件时出现段错误

c - 在 ARM 中使用 32 位数据类型和 8 位数据类型

c - 是否有可以处理 C 内联结构的 MSVC 版本?

python - 无法在字符串数组中使用 numpy 找到 nan 条目

c# - 浅拷贝值类型数组的一段

c - 用于简单 POS 标记的 NLP 库