c - struct 中的 struct timespec

标签 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;
}

最佳答案

所有现有的答案和评论都指出了错误所在的关键部分。然而,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

关于c - struct 中的 struct timespec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25816580/

相关文章:

c - 分配超大内存 - C 中的指针

C - Linux 内核 - 如何使用 timespec_to_ns()?

由于输入数组尺寸过大,C 程序崩溃(段错误)。如何在不使用 static/global/malloc 的情况下防止它?

c++ - 获得绝对时间的更好方法?

c++ - C语言中extern存储类说明符的重要性和用法

c++ - C++ 和 C 中的 header 保护

c - 如何将已排序的结构返回到我的主函数?

C - 打印素数列表(递归)

c - 为什么使用 while(fgets) 语句后我的 c 指针地址会发生变化?

go - 使用指针和值接收器构造类型实例