以下是重现问题的一个最小示例。对我来说,代码看起来很无辜。我怀疑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;
}
答案 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