цифровая электроника
вычислительная техника
встраиваемые системы

 
» » Часто встречающиеся ошибки, связанные с неправильным использованием памяти

Часто встречающиеся ошибки, связанные с неправильным использованием памяти

Автор: Mike(admin) от 15-03-2019, 05:35

Управление виртуальной памятью и ее использование могут оказаться трудной задачей для программистов на языке С, чреватой многочисленными ошибками.


Ошибки, вызванные неправильным использованием памяти, относятся к числу наиболее неприятных, поскольку они часто проявляются не сразу, а на значительном удалении во времени и в пространстве от источника их возникновения. Стоит записать неправильные данные по неправильному адресу, и ваша программа может прокручиваться часами, прежде чем она, наконец, прекратит выполняться в какой-то другой отдаленной части. Рассмотрим нескольких общих ошибок, связанных с неправильным использованием памяти.


Разыменование плохих указателей


В виртуальном адресном пространстве процесса имеются большие дыры, которые не отображаются ни на какие имеющие смысл данные. Если вы пытаетесь разыменовывать указатель на место одной из этих дыр, операционная система прекратит выполнение вашей программы, инициируя исключительную ситуацию по нарушению сегментации. Кроме того, некоторые области виртуальной памяти доступны только для чтения. Попытка осуществить запись в одну из этих областей приводит к исключительной ситуации по нарушению защиты.


Известный пример разыменования плохого указателя представляет собой пример классической ошибки при выполнении функции scanf. Предположим, что вы хотите использовать scanf, чтобы прочитать целое число из stdin в некоторую переменную. Это делается правильно, когда в функцию scanf передается строка формата и адрес переменной. Однако программисты, не имеющие достаточного опыта работы с языком С, просто передают содержимое val вместо ее адреса. В этом случае функция scanf интерпретирует содержимое val как адрес и будет пытаться записывать слово по этому адресу.


В лучшем случае, программа заканчивается немедленно, возбуждая исключительную ситуацию. В худшем случае, содержимое val соответствует некоторой допустимой для чтения/записи области виртуальной памяти, и вы ошибочно переписываете нужную запись в памяти, что обычно намного позже приводит к непредсказуемым и, зачастую, пагубным последствиям.


Впрочем, чтобы поменьше совершать такие ошибки, необходимо обладать необходимыми компетенциями и достаточным уровнем знаний. Этого можно достичь многими путями, одним из которых может быть, например, запись на дистанционное обучение пермь, где можно многому научиться дистанционно.




© digitrode.ru



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий