barrier_create(*test_barrier_p);
Поскольку barrier_create
принимает адрес barrier_p
, это должно быть &test_barrier_p
, а не *test_barrier_p
.
printf("hi\n");
Неточный тест на достижимость кода, поскольку stdout, скорее всего, буферизован; Я бы порекомендовал fprintf(stderr, "hi\n");
вместо.
new_barrier = (barrier_p) malloc(sizeof(*new_barrier));
Я бы сказал sizeof(barrier_t)
. Снова *
в нечетном месте, запись _p
, возможно, не помогает ясности манипуляции с типом.
Для педантизма я бы проверил возвращаемое значение malloc. Я не вижу смысла в сохранении старого значения, если только каким-то образом не исправить ошибку malloc.
Какова цель подсчета?