Да, в этом случае произойдет утечка памяти. C не имеет никакой сборки мусора - если вы выделите память и не сможете ее освободить, она будет утечка, простая и понятная.
Если вы хотите избежать утечки памяти, не звоните pthread_cancel
. Сделайте так, чтобы ваши потоки грациозно выходили, установив флаг, запрашивающий их выход, а затем, когда они обнаружат, что этот флаг установлен, они могут освободить свою память и убить себя, возвращаясь из своих процедур потока или вызывая pthread_exit
.
В качестве альтернативы, вы можете установить обработчик очистки потока, вызвав pthread_cleanup_push
, который будет вызываться, когда ваш поток завершается или отменяется при вызове pthread_cancel
. Вы можете использовать функцию-обработчик, которая освободит любую выделенную память, которая у вас есть.