c - 结构指针数组,在 c 中获取段错误

标签 c arrays pointers struct segmentation-fault

<分区>

#define MAX_SPACES 10
#define MAX_SIMPLE_EVENTS 5000
#define MAX_USER_EVENTS 1000

struct {
  EventSpace* p_spaces[MAX_SPACES];
  SimpleEvent* p_simple_events[MAX_SIMPLE_EVENTS];
  UserEvent* p_user_events[MAX_USER_EVENTS];
}* G_manager;

static void add_space(EventSpace* space){
  static uint16_t index = 0;
  (*G_manager).p_spaces[index] = space;
}

在gdb中运行后得到: 程序收到信号 SIGSEGV,段错误。 add_space 中的 0x0000000000400559 (space=0x7fffffffdf30)

如何改进?

最佳答案

至少在您展示的代码中,您实际上并没有为包含数组的结构分配内存;你只创建了一个指针。因此,当您取消引用该指针意味着写入结构的实例时,您会遇到一个随机内存地址并得到相对温和的程序崩溃结果。

您可以将 G_manager 从指向结构的指针更改为结构本身的实例;或者您可以为结构分配一个足够大的缓冲区并将该缓冲区分配给 G_manager

关于c - 结构指针数组,在 c 中获取段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42960600/

相关文章:

javascript - 在多维数组中查找条目,其中属性的一部分与给定文本匹配

c - 改进了在结构指针内为结构双指针动态分配内存的方法

c++ - 将来自 stdin 的交互式输入与到 stdout 的异步输出相结合

c - 生成文件的自动操作

php - 从多维数组创建数组

javascript - 将 "in"运算符用于带有 javascript 的二维数组

c - 使用 void 时编译错误时 C 中的双指针错误

c - 取消初始化整数指针的赋值

c - 如何读取两个字节位置之间的文件行

c - 在不使用 STL 的情况下寻找正确的下限和上限 C 代码时遇到麻烦