pthread_join(thread_id, &res) ,如果 &res 不为 NULL - 是否需要 free(res) ?

pthread_join(thread_id, &res) , if &res is not NULL - is free(res) needed?

我偶然发现了一个代码示例 here。引起我注意的行(跳过所有其他行):

{  
...  
void *res;  
...  
s = pthread_join(tinfo[tnum].thread_id, &res);  
...  
free(res);      /* Free memory allocated by thread */  
}  

比我更深入 pthreads 的人可以对 free(res) 发表评论吗?我不得不说我以前从未见过这个,而且谷歌搜索 1-1.5 小时也没有给我任何其他类似的例子。

In pthread_join(thread_id, &res) , if &res is not NULL - is free(res) needed?

这取决于线程的 return 值是否是动态分配的(与 malloc() & co)。

如果您查看同一页上的函数 thread_start(),您会看到它有一个 return 语句:

return uargv;

uagrv 分配了:

       uargv = strdup(tinfo->argv_string);

因此,在 pthread_join() 调用之后的 main() 中使用了 free() 调用。 因为 res 是用 uargv 填充的(return 由线程编辑)。您可以在概念上假设 pthread_join() 函数中有这样的代码:

 if (res)
   *res = uargv;

这是使用 strdup() 分配的(内部分配内存)。所以你free()吧。如果线程只有 return NULL;(而 free() 本身就是 uargv),那么您不需要 free().

一般的答案是,如果你用 malloc() 系列功能分配一些东西,那么你需要 free()