c - 在 Pthreads 中使用 malloc

标签 c pointers malloc sizeof

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

相关文章:

C:比较结构中的两个字符串

c - 为什么我们要为一个int数据的链表分配内存?

c - 如何在相互依赖的C文件中定义pthread和互斥锁?

c++ - strdup() 和 strcpy

c - 函数中 char 指针数组的大小

c - 每次迭代都会替换索引中的值

c - 如何创建指向 NULL 的结构指针数组

c - 动态分配char数组和int数组的结构

c - 如何在risc-v中实现printf函数?

c - 没有我们可以通过命令行传递给应用程序的命令行参数?