gpt4 book ai didi

c - 在 Pthreads 中使用 malloc

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

这是来自 Pthreads 的实际 C 代码:

ThreadParms *parms = NULL; 
if ((parms = (ThreadParms *) malloc (sizeof (*parms))) == NULL)
{
goto FAIL0;
}

parms->tid = thread;
parms->start = start;
parms->arg = arg;

为什么他们选择 malloc *parms 而不是 ThreadParms?看起来它只分配了一个指针(这将是一个错误),但它显然分配了整个结构的大小。这是正确的吗?

最佳答案

这是 C 中的一个常见技巧 - 使用解引用指针表达式代替实际类型。

理由如下:如果你有

some_type *some_var = malloc(sizeof(*some_var));

然后将 some_type 更改为 some_other_type,代码将继续正常工作,只需进行一次更改。

但是,如果您开始于

some_type *some_var = malloc(sizeof(some_type));

然后你必须在两个地方改变some_type:

some_other_type *some_var = malloc(sizeof(some_other_type));

否则您的代码会出错。

It looks like it is allocating only a pointer (which would be an error)

星号使 sizeof 评估整个 struct 的大小,因此代码是正确的。

关于c - 在 Pthreads 中使用 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39377615/

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