C结构数组段错误

标签 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;

编译后,程序打印: 段错误(核心已转储)

最佳答案

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

在你的代码中,

t->type = 0;

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

解决方案:您需要先为 t 分配内存,然后才能实际取消引用它。也许你可以看看 malloc()和函数族来完成内存分配。

关于C结构数组段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33744994/

相关文章:

c - 在 C 中取消引用二维数组

c - 通过指针访问结构中的结构

c - 如果检查指针值,指针/malloc() 会发生奇怪的崩溃

c++ - 无法删除我的临时指针?

c - atof 使用 atoi 错误

c - 如何在一次输入中获得多个值?(不确定性数量)

c - strtok() 嵌套时只分词一次

javascript - Vue 对数组进行排序,后跟索引 (0, 1, 2, 3 ...)

c# - C# 是 C 的超集吗?

ios - 在iOS应用程序中解析JSON数据返回空数组