-1

以下は、問題を再現するための最小限の例です。私には、コードはまったく無害に見えます。背後には何らかの魔法があると思い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;
}
4

1 に答える 1

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
于 2014-09-14T18:30:36.240 に答える