2014-01-13 70 views
-1

我有一个功能,可以让我设置一些void *user_data里面我是用存储一个指向struct job_data定义为:铸造空指针结构指针不返回内部结构正确的指针

struct job_data { 
    int *i 
    struct *j; 
} 

它确实这通过允许我将指针传递给user_data设置函数通过调用,所以如果我得到struct job_data job_info,我会通过set_user_data(&job_info)设置它,其中* set_user_data *收到void *作为参数。

然而,当我把我的指针回来后,并通过struct job_data *job=user_data投吧,里面的指针(工作。我job.j)在原始job_data结构设置为不同的三分球比我已经投射到void *。这是为什么?我应该采取什么不同的方式来重新捕获我的原始指针ij指针?

+0

请发布您的功能的简化版本,以及如何调用它。 – zmbq

+0

并指定原始'job_info'的声明方式和位置, – Jack

+2

最有可能:当您检索指针时,堆栈中'struct job_data job_info'分配的作用域不再存在。 –

回答

1

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

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

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