struct timepec в структуре

Ниже приведен один минимальный пример для воспроизведения проблемы. Для меня код выглядит довольно невинно. Я подозреваю, что есть какая-то магия позади 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 ответ

Решение

Все захватывающие ответы и комментарии указывают на критическую часть, где ошибка. Тем не менее, некоторое использование sizeof некорректно, поэтому я отвечаю на этот вопрос.

Я посмотрел на это ТАК небрежно и предположил, что 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
Другие вопросы по тегам