操作系统: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说该程序崩溃了,正在寻找解决方案等).你们有谁知道为什么会这样?
谢谢!
根据值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)
| 归档时间: |
|
| 查看次数: |
337 次 |
| 最近记录: |