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