我偶然发现了一个代码示例here。吸引我注意的线条(所有其他线条都被跳过):
{
...
void *res;
...
s = pthread_join(tinfo[tnum].thread_id, &res);
...
free(res); /* Free memory allocated by thread */
}
有人可以更深入地了解pthreads而不是我自己评论free(res)
吗?我不得不说我以前从未见过这种情况,并且用1.5到5小时的谷歌搜索没有给我任何其他类似的例子。
答案 0 :(得分:2)
在pthread_join(thread_id,& res)中,如果& res不为NULL - 是免费的(res) 需要的?
取决于线程的返回值是否是动态分配的(使用malloc()
& co)。
如果你在同一页面上查看函数thread_start()
,你会发现它有一个return语句:
return uargv;
和uagrv
分配了:
uargv = strdup(tinfo->argv_string);
因此,在free()
来电后main()
使用pthread_join()
来电。
因为res
填充了uargv
(由线程返回)。您可以在概念上假设pthread_join()
函数中有这样的代码:
if (res)
*res = uargv;
这是使用strdup()
(内部分配内存)分配的。所以你free()
。如果帖子只有return NULL;
(和uargv
本身的free()),那么您就不需要free()
。
一般的答案是,如果您使用malloc()
家庭功能分配某些内容,则需要free()
。