gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 12:12:55 27 4
gpt4 key购买 nike

我偶然发现了一个代码示例 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?

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

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

return uargv;

uagrv被分配了:

       uargv = strdup(tinfo->argv_string);

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

 if (res)
*res = uargv;

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

一般的答案是,如果您使用 malloc() 系列函数分配一些东西,那么您需要 free()

关于linux - pthread_join(thread_id, &res) ,如果 &res 不为 NULL - 是否需要 free(res) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35770019/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com