Это зависит от того, считаете ли вы ошибку исправимой или нет.
Если вы считаете, что ошибка может быть исправлена, и ваша функция возвращает код ошибки (или как-то сигнализирует вызывающей стороне), обязательно освободите память и любые другие ресурсы (например, дескрипторы файлов), которые не будут использоваться еще раз.
Если вы не думаете, что ошибка исправима, и вы выходите из программы (через abort
или что-то подобное), не беспокойтесь об освобождении ресурсов. Система позаботится об этом при выходе из программы.