我有一个关于从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 :(得分:10)
这不安全。你只是幸运(或者说不幸运)。函数结束后,所有自动变量都会丢失(因此指向它们的指针是无用的)。
malloc
并返回该内存总之,使用一些在函数结束后仍然存活的内存。