<分区>
我正在用 c 语言制作游戏,我创建的结构数组出现错误。
typedef struct{
int type, level, x, y, w, h;
} Tile;
Tile *map[256];
Tile *t;
t->type = 0;
t->level = 0;
t->x = 0;
t->y = 0;
t->w = 0;
t->h = 0;
map[0] = t;
编译后,程序打印:
段错误(核心已转储)
<分区>
我正在用 c 语言制作游戏,我创建的结构数组出现错误。
typedef struct{
int type, level, x, y, w, h;
} Tile;
Tile *map[256];
Tile *t;
t->type = 0;
t->level = 0;
t->x = 0;
t->y = 0;
t->w = 0;
t->h = 0;
map[0] = t;
编译后,程序打印:
段错误(核心已转储)
最佳答案
定义指针不会自动使该指针指向有效的内存位置。未分配内存的指针称为未初始化指针,不能(我们应该说,不应该吗?)被取消引用。
在你的代码中,
t->type = 0;
等等,你正在取消引用未分配内存的t
。因此,通过取消引用一个未初始化的指针,您可以调用 undefined behavior .段错误是 UB 的众多副作用之一。
解决方案:您需要先为 t
分配内存,然后才能实际取消引用它。也许你可以看看 malloc()
和函数族来完成内存分配。
关于C结构数组段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33744994/