我正在编写一个事件系统,程序员可以在其中制作自己的事件,但我遇到了用于传递事件数据的 void 指针的问题。事件系统大致是这样工作的:
typedef enum { ... USER_EVENT ...} event_type;
typedef struct {
int id;
void* data;
} user_event;
typedef struct {
event_type type;
union {
...
user_event user;
...
};
} event;
所以我正在编写一个用户事件,使用我自己的自定义结构,并将其传递给这个函数:
void add_user_event(int id, void* data) {
event e;
user_event u;
u.id = id;
u.data = data;
e.type = USER_EVENT;
e.user = u;
add_event(e); /* add_event is just a function that adds the event to the event stack, and it works fine with predefined events */
}
...
add_user_event(my_user_event_id, (void*)&data);
然后我像这样检索它:
...
if (e.type == USER_EVENT && e.user.id == the_user_id) {
user_data_struct data = *(user_data_struct*) e.user.data;
/* do stuff */
}
事情是,这应该有效,但它没有(它只是给出完全乱码的数据)。我确信给定的数据是好的(做了一些检查),但是它以某种方式没有得到正确的数据(可能是一个错误的指针位置?)。如果这有帮助的话,其他一些提示是add_user_event
调用是在函数内进行的(并且事件是在函数内定义的)。这会影响什么吗?
提前感谢,如果这还不够清楚,请告诉我。