我有一个函数允许我设置一些void *user_data
,我用它来存储指向struct job_data
的指针,定义为:
struct job_data {
int *i
struct *j;
}
这样做是允许我通过调用将指针传递给 user_data 设置功能,所以如果我有struct job_data job_info
,我会通过{{1}设置它其中* set_user_data *接收set_user_data(&job_info)
作为参数。
然而,当我稍后将指针返回并通过void *
投射时,内部指针( job.i 和 job.j )已设置我投射到struct job_data *job=user_data
的原始 job_data 结构中的指针不同。这是为什么?我应该采取哪些措施来重新获得原始的 i 和 j 指针?
答案 0 :(得分:1)
当您检索指针时,很可能在堆栈上分配struct job_data job_info
的范围不再存在。
如果范围在您检索指针时已经结束,那么内容很可能已被覆盖。
您可以通过确保范围有效,只要必须访问指针或在堆上分配结构(malloc
和系列)来解决此问题。