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