Основы программирования в Linux
Шрифт:
Вы также должны убедиться в том, что у выражения макроса
Выполните упражнение 10.2.
Далее приведена программа assert.c, определяющая функцию, которая должна принимать положительное значение. Она защищает от ввода некорректного аргумента благодаря применению макроса
После включения заголовочного файла assert.h и функции "квадратный корень", проверяющей положительное значение параметра, вы можете писать функцию
Теперь при выполнении программы вы увидите нарушение в макросе
Как это работает
Когда вы попытаетесь вызвать функцию
Если вы перекомпилируете программу с опцией
Некоторые более старые версии математической библиотеки генерируют исключение для математической ошибки, и ваша программа будет остановлена с сообщением "Floating point exception" ("Исключение для числа с плавающей точкой") вместо возврата NaN.
Устранение ошибок использования памяти
Распределение динамической памяти — богатый источник ошибок, которые трудно выявить. Если вы пишете программу, применяющую функции
Обычно блоки памяти выделяются функцией
Если вы записываете в область, расположенную после конца выделенного блока (или перед началом блока), вы с большой долей вероятности повредите структуры данных, используемые библиотекой malloc, следящей за распределением памяти. В этом случае в какой-то момент времени вызов
Неудивительно, что существуют коммерческие и бесплатные средства, способные помочь в решении проблем этих двух типов. Например, есть много разных версий функций
ElectricFence
Библиотека ElectricFence была разработана Брюсом Перенсом (Bruce Perens). Она доступна как необязательный компонент в некоторых дистрибутивах Linux, таких как Red Hat (Enterprise и Fedora), SUSE и openSUSE, и может быть легко найдена в Интернете. Это средство пытается применять виртуальную память системы Linux для защиты памяти, используемой функциями
Выполните упражнение 10.3.
Далее приведена программа efence.c, которая выделяет память с помощью функции
Когда вы откомпилируете и выполните программу, то не увидите некорректного поведения. Однако вероятно, что область памяти, выделенная
#Бояръ-Аниме. Газлайтер. Том 7
7. История Телепата
Фантастика:
аниме
фэнтези
попаданцы
альтернативная история
рейтинг книги
Тринадцатый VI
6. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Властелин Севера
3. Саксонские хроники
Приключения:
исторические приключения
рейтинг книги
Наследие Маозари
1. Наследие Маозари
Фантастика:
рпг
попаданцы
аниме
рейтинг книги
Отверженный. Дилогия
Отверженный
Фантастика:
фэнтези
рейтинг книги
Дюна: Дом Харконненов
2. Прелюдия к Дюне
Фантастика:
научная фантастика
рейтинг книги
Путь эльдар: Омнибус
Warhammer 40000
Фантастика:
эпическая фантастика
рейтинг книги
Древняя Русь и Великая степь
Научно-образовательная:
история
рейтинг книги
Мир смерти
Шедевры фантастики
Фантастика:
боевая фантастика
космическая фантастика
рейтинг книги
Монстры
2009. Антология
Фантастика:
фэнтези
социально-философская фантастика
ужасы и мистика
юмористическая фантастика
детективная фантастика
рейтинг книги
Статьи из "Арабесок"
Другие редакции
Документальная литература:
публицистика
рейтинг книги