这是来自 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/