struct指针数组,在c中得到段错误

时间:2017-03-22 19:06:53

标签: 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(空格= 0x7fffffffdf30)

如何推动它?

1 个答案:

答案 0 :(得分:2)

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

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