프로그래머가 자신의 이벤트를 만들 수있는 이벤트 시스템을 작성하고 있지만 이벤트 데이터를 전달할 때 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
호출이 이루어진다는 것입니다. 이것은 어떤 영향을 미칠 수 있습니까?
미리 감사 드리며 충분히 명확하지 않은 경우 알려주십시오.
) &data);'방법
그래서이 내 원래의 코드이었다 'data'가 정의 되었습니까? 어떤 함수의 로컬 객체 일 수 있습니까? – cnicutar@cnicutar, 예, 함수 내에서 "객체"가 정의되어있는 경우 그 객체가 의미하는 것이면 – MiJyn
그리고 그것을 역 참조하기까지 충분히 오래 살아남습니까? ? – cnicutar