结构中的struct timespec

时间:2014-09-12 20:48:28

标签: c struct timespec

以下是重现问题的一个最小示例。对我来说,代码看起来很无辜。我怀疑struct timespc背后有一些魔力;但是,我找不到任何可以解释它崩溃的原因。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <time.h>

typedef struct _task
{
    int id;
    int deadline;
    struct timespec processed_at;
    int process_time;
} task;

int main(int argc, char *argv[])
{
    task *t = malloc(sizeof t);
    t->process_time = 3;
    free(t);
    return 0;
}

1 个答案:

答案 0 :(得分:2)

所有现有的答案和评论都指出了错误所在的关键部分。但是,sizeof的一些用法不正确,所以我回答了这个问题。

我不小心看了这个SO,并假设OP提供了正确的语法。由于他/她在谈论为什么要使用风格,我希望两者都是正确的。

至于它是否与()或没有()一起使用,根据cppreference,类型需要(),但是对于一元表达式则不需要。因此,sizeof task不正确(我在clang和gcc上出错);相反,它应该是sizeof(task)sizeof *t

task *t = malloc(sizeof *t); // right
task *t = malloc(sizeof(task)); // right
task *t = malloc(sizeof task); // wrong both on gcc and clang
task *t = malloc(sizeof t); // syntactically right, but it's not what you want