Книга: Основы программирования в Linux
Устранение ошибок использования памяти
Распределение динамической памяти — богатый источник ошибок, которые трудно выявить. Если вы пишете программу, применяющую функции malloc
и free
для распределения памяти, важно внимательно следить за блоками, которые вы выделяете, и быть уверенным в том, что не используется блок, который вы уже освободили.
Обычно блоки памяти выделяются функцией malloc
и присваиваются переменным-указателям. Если переменная-указатель изменяется, и нет других указателей, указывающих на блок памяти, он становится недоступным. Это утечка памяти, вызывающая увеличение размера программы. Если вы потеряете большой объем памяти, скорость работы вашей системы, в конце концов, снизится, и система уйдет за пределы памяти.
Если вы записываете в область, расположенную после конца выделенного блока (или перед началом блока), вы с большой долей вероятности повредите структуры данных, используемые библиотекой malloc, следящей за распределением памяти. В этом случае в какой-то момент времени вызов malloc
или даже free
приведет к нарушению сегментации, и ваша программа завершится аварийно. Определение точного места возникновения сбоя может оказаться очень трудной задачей, поскольку нарушение могло возникнуть задолго до события, вызвавшего аварийное завершение программы.
Неудивительно, что существуют коммерческие и бесплатные средства, способные помочь в решении проблем этих двух типов. Например, есть много разных версий функций malloc
и free
, которые содержат дополнительный код для проверки выделения и освобождения блоков памяти и пытаются учесть двойное освобождение блока и другие типы неправильного использования памяти.
- Перехват ошибок
- Обработка перехваченных ошибок
- 3.2.1.2. Начальное выделение памяти: malloc()
- Приложение 10. Коды ошибок
- Часть III Диагностика и устранение неисправностей
- B1.7. Функции обработки ошибок
- Пример использования шаблона «Выводы – рекомендации»
- Неисправности оперативной памяти
- Устранение неисправностей МП
- Как работает модуль оперативной памяти
- Описание типов модулей оперативной памяти
- Извлечение и установка модулей памяти