Книга: Программирование для Linux. Профессиональный подход
2.2.4. Ошибки выделения ресурсов
2.2.4. Ошибки выделения ресурсов
Обычно при неудачном выполнении системного вызова наиболее приемлемое решение — отменить текущую операцию, но не завершить программу, так как можно восстановить ее нормальную работу. Один из способов сделать это — выйти из текущей функции, передав через оператор return
код ошибки вызывающему модулю.
В случае, когда выход осуществляется посреди функции, важно убедиться в том, что ресурсы, выделенные в функции ранее, освобождены. К таким ресурсам относятся буферы памяти, дескрипторы и указатели файлов, временные файлы, объекты синхронизации и т.д. В противном случае, если программа продолжит выполняться, ресурсы окажутся потерянными.
В качестве примера рассмотрим функцию, загружающую содержимое файла в буфер. Функция выполняет такую последовательность действий:
1. выделяет буфер;
2. открывает файл;
3. читает содержимое файла и записывает его в буфер;
4. закрывает файл;
5. возвращает буфер вызывающему модулю.
Если файл не существует, этап 2 закончится неудачей. Подходящая реакция в этом случае — вернуть из функции значение NULL
. Но если буфер уже был выделен на этапе 1, существует опасность потери этого ресурса. Нужно не забыть освободить буфер где-то в программе. Если же неудачей завершится этап 3, требуется не только освободить буфер перед выходом из функции, но и закрыть файл.
В листинге 2.6 показан пример реализации такой функции.
- Low Resources Simulation (Нехватка ресурсов)
- 3.2.4. Ошибки при задавании вопросов
- Ошибки проектирования базы данных
- 6.2. Типичные ошибки при проведении программ продвижения и варианты их устранения
- Часть четвертая Стратегии защиты от Главной Ошибки
- 4.4. Типичные ошибки распределения прав
- Листинг 11.11. Три полезных способа кэширования графических ресурсов
- Ошибки при подсчете СТП
- 2.5.3. Возможные ошибки
- Ошибки в формулах
- Работа с выделениями
- 2.6. Сегментирование рынка, методики выделения целевых сегментов (по продукту, по территориям). Алгоритм формирования ко...