分配复合结构时,C程序崩溃

Fer*_*llo 0 c struct

操作系统:Windows 7,编译器:GCC 3.2.3(MinGW)

我用C创建了这三个数据结构:

#define MAP_NAME_LEN    30
#define MAP_W           25
#define MAP_H           19
#define WORLD_W         32
#define WORLD_H         32

typedef unsigned char byte;

typedef struct Tile
{
    byte type;
    byte character;
    byte fgColor;
    byte bgColor;
};

typedef struct Map
{
    char name[MAP_NAME_LEN];
    Tile overlay[MAP_H][MAP_W];
    Tile underlay[MAP_H][MAP_W];
};

typedef struct World
{
    Map area[WORLD_H][WORLD_W];
};
Run Code Online (Sandbox Code Playgroud)

当我尝试创建Tile和/或Map的单个实例时,没关系,完全没问题,一切正常.但是如果我尝试创造一个世界,就像......

int main()
{
    World world;
}
Run Code Online (Sandbox Code Playgroud)

...程序只是崩溃(Windows 7说该程序崩溃了,正在寻找解决方案等).你们有谁知道为什么会这样?

谢谢!

bdo*_*lan 5

根据值MAP_NAME_LEN,MAP_H,MAP_W,WORLD_H,和WORLD_W,你可能已经创建的堆栈上的块状结构.不要那样做.堆栈相对较小,通常无法处理超过几兆字节的分配(并且通常一次只能处理几十千字节的分配).鉴于你的常数值,你可能会遇到这些限制 - 你的World结构大约接近4MB,太大而不能合理地放在堆栈上.

因此,相反,在堆上分配它malloc,或者作为全局或文件本地静态变量:

World world;

int main()
{
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

要么

int main()
{
    World *world = malloc(sizeof(*world));
    /* ... */
    free(world);
}
Run Code Online (Sandbox Code Playgroud)