2011-09-16 171 views
3

我有一个关于从pthread执行函数返回结果的问题。Pthread返回结果

相关代码:

void* thread_func(void* args) 
{ 
    float result = 0; 
    // ...do something 
    return (void*)&result; 
} 

// ... using code 
float answer; 
pthread_join(pthread_handle, &answer); 

对我来说,似乎这种解决方案并不像它应该安全地工作,因为result将驻留的thread_func在堆栈上并停止后thread_func回报存在。然而,在我所做的所有测试中,它似乎完美无缺地工作。有什么我误解为什么这是安全的?如果不是这样,我的测试只是偶然发生,我如何安全地从thread_func安全返回值?

+0

这绝对不行,最有可能的是你没有完全测试过。尝试'valgrind'开始。 –

回答

10

这是不安全的。你很幸运(或者倒霉)。函数结束后,所有自动变量都会丢失(因此指向它们的指针是无用的)。

  • 使用malloc并返回内存
  • 使用一个静态的对象(例如一个全局变量)
  • 使用内存的功能,通过将加入

总之使用一些内存将在函数结束后继续存在。

+0

在我的通话代码中,我可以拨打免费(&answer)吗?或者我还必须将其更改为浮动*答案,然后在完成返回结果后请求免费(答案)? – helloworld922

+1

'免费(&答)'**从来没有**有效的C.你将不得不做后者。 –

+0

@ helloworld922只有通过'malloc'获得的东西才会调用'free'。第二个选择似乎很好。 – cnicutar