#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)
如何推动它?
答案 0 :(得分:2)
至少在您显示的代码中,您实际上没有为包含数组的结构分配内存;你只创建了一个指针。因此,当您取消引用该指针意味着写入结构的实例时,您会点击一个随机的内存地址并获得程序崩溃的相对温和的结果。
您可以将G_manager
从指针结构更改为结构本身的实例;或者你可以malloc一个足够大的缓冲区用于结构,并将该缓冲区分配给G_manager