将void指针强制转换为struct指针不会在结构内部返回正确的指针

时间:2014-01-13 13:14:41

标签: c pointers struct casting

我有一个函数允许我设置一些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 指针?

1 个答案:

答案 0 :(得分:1)

当您检索指针时,很可能在堆栈上分配struct job_data job_info的范围不再存在。

如果范围在您检索指针时已经结束,那么内容很可能已被覆盖。

您可以通过确保范围有效,只要必须访问指针或在堆上分配结构(malloc和系列)来解决此问题。