c中的结构数组的大小是否有限制

时间:2020-06-19 11:35:33

标签: c windows memory mingw

所以我正在制作一个基于文本的游戏,但遇到了一个问题。我为每个图块制作了以下struct元素的101 x 101的映射:

struct tile
{
    char name[21];
    short id;
    char description[100];
}; //End tile struct

这仅占用了1MB以上的内存。如果我将地图的大小由103更改为103,则可以正常工作;但是,如果我将其更改为151乘151,则当我尝试输入保存功能时程序会崩溃。

是否有原因,如果可以,我可以解决吗?

我正在运行64位系统,据我所知,指针应该能够正确处理所有问题,但也许我错了。

编辑:复制此功能的功能是:

int main()
{
    struct tile map[151][151];

    mapGen(map);

} //End main

mapGen函数的作用并不重要,因为这不是问题。有人告诉我,该堆栈只能容纳1MB的内存,并且一旦尝试加载main(在我的情况下为save()),它将使程序崩溃。

1 个答案:

答案 0 :(得分:0)

由于数组是在块范围内定义的,因此它位于堆栈上。给定阵列的大小,它将占用约2.8MB的空间,这是大多数堆栈实现所允许的空间。这会导致堆栈溢出,从而导致undefined behavior

如果将数组移到任何函数之外,因此具有文件作用域,则它将驻留在可以处理该大小的变量的数据部分中。您还可以将其保留在块范围内,并使用static修饰符,该修饰符还将变量放入数据部分并赋予其完整的程序寿命。

您还可以在堆上为其动态分配空间:

struct tile (*map)[151] = malloc(sizeof(*map) * 151);
相关问题