Поскольку я думаю, что это домашняя работа, я описываю то, что приходит мне в голову, только взглянув на код:
Сначала вы выделяете 500-байтовый буфер в куче (malloc(500)
) в точке где вы еще не знаете точный размер. Также вы не проверяете, возвратил ли mallo c указатель NULL. Я бы изменил эту строку на calloc(numsSize, sizeof(*out))
, так как результирующий массив в худшем случае имеет тот же размер, что и входной массив. Также добавьте проверку на возвращаемое значение.
Во-вторых, вы передаете переменную для хранения счетчика результатов, но нигде не назначаете ее. Без этой информации вызывающая сторона не может знать, сколько элементов в результирующем массиве являются действительными.