Доброго времени суток. Есть программа на С, которая открывает множество файлов и выделяет большое количество динамической памяти. Почти все массивы выделяюся, а файлы открываются на разных этапах работы программы, и используются затем до конца. При этом в процессе работы происходит обработка ошибок, и если какая-то из них (как-то: выделение памяти, открытие файла, ошибка в формате данных файла) произошла, то программа завершает работу.
Как Вы считаете, как в данном случае корректнее всего освобождать пямять и закрывать файлы? Проверять все инициализованные переменные типа type* и ранее открытые файлы в каждом случае проверки ошибок? Полагаться на саму программу, что она корректно освободит пямять при завершении? Использовать глобальные переменные и в слечае ошибки вызывать некую функцию finalize(), которая закрывает все файлы, освобождает пяиять и завершает работу с exit(1)? Или даже использовать goto?
Заранее спасибо.