C结构数组分段错误

时间:2015-11-16 21:29:26

标签: c arrays pointers data-structures struct

我正在用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;

编译完成后,程序会打印: Segmentation fault (core dumped)

1 个答案:

答案 0 :(得分:2)

定义指针不会自动使该指针指向有效的内存位置。一个没有分配内存的指针被称为未初始化的指针,不能(我们应该说,不应该?)被解除引用。

在您的代码中,

t->type = 0;

等等,您正在取消引用未分配内存的t。因此,通过取消引用单元化指针,可以调用undefined behavior。分段错误是UB的许多副作用之一。

解决方案:您需要在实际取消引用之前将内存分配给t。也许您可以查看malloc()和函数族来完成内存分配。