【问题标题】:C struct array segmentation fault [closed]C结构数组分段错误[关闭]
【发布时间】:2015-11-16 21:29:26
【问题描述】:

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

【问题讨论】:

  • 当然可以。您定义了指针,但不将它们指向有效对象。
  • 您能详细说明一下吗?
  • 请阅读有关内存分配、指针和 C 的一般信息。没有冒犯,但是仅仅阅读一本好的 C 书对你的帮助远不止一个简单的评论和任何具体的答案。

标签: c arrays pointers data-structures struct


【解决方案1】:

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

在您的代码中,

t->type = 0;

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

解决方案:您需要先将内存分配给t,然后才能真正取消引用它。也许你可以看看malloc() 和一系列函数来完成内存分配。

【讨论】:

  • 好的,那我该怎么做呢?
  • @DJGee 正如我所说,您需要先为指针分配内存。
  • @DJGee 绝对需要听从奥拉夫的建议。
  • 注意:没有“为指针分配内存”之类的东西,只有“分配内存”并让指针指向该内存。
  • @immibis 请解释一下。你到底发现了什么错误。
猜你喜欢
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 2018-05-27
  • 2021-07-15
  • 1970-01-01
  • 2021-06-24
相关资源
最近更新 更多