Вы должны вызывать free, когда вы больше не используете выделенную память.
Предположительно, это после вашего соединения, но так как ваши целые числа размещены внутри цикла, вам нужно будет сохранить ссылку внецикл.
Вместо того, чтобы выделять ваши целые числа по отдельности, рассмотрите возможность их выделения сразу за пределами цикла:
int *threadNums = malloc(sizeof(int) * NUM_THREADS)
for (int j = 0; j < NUM_THREADS; j++) {
threadNum[j] = j;
pthread_create(..., (void *)&threadNum[j]);
}
//something to ensure the threads are done using the memory
free(threadNums);
(не проверено на синтаксические ошибки, но, надеюсь, вы поняли идею)
Обратите особое внимание на комментарий.Если ваши потоки не были заняты памятью до того, как вы вызовете free, у вас есть состояние гонки, которое вызывает неопределенное поведение.Один из способов обеспечить это - объединить все потоки.
В качестве альтернативы, если данные используются только как поток, поток может быть ответственным за освобождение памяти - в этом случае вы вызываете free на вашемуказатель, когда функция потока больше не нуждается в этом.