Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/studb20/public_html/index.php on line 4
 Отладка указателей - ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 10) онлайн - Studbook

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 10) онлайн

Отладка указателей

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

Отдельной версией этой проблемы является случай, когда указатель указы- вает на адрес NULL. Например, это может случиться, если указатель опреде- лен как глобальная переменная, так как глобальные переменные автоматиче- ски инициализируются 0. Вот небольшая программа, демонстрирующая такую ситуацию:

int* intptr; // глобальная переменная инициализируется нулем

void main ( ) {

*intptr = 37;       // нельзя поместить значение 37 по адресу                 // intptr, так как значение intptr равно                 // 0, а это является некорректным значением                 // для указателя

}

При определении указателю intptr будет присвоено значение 0, так как он яв- ляется глобальной переменной. В строке программы происходит попытка по- местить значение 37 по адресу NULL.

Однако встроенная в компилятор проверка ошибок при запуске остановится при попытке доступа к адресу NULL, выведет сообщение об ошибке (это может быть нарушение доступа, присвоение значения нулевому адресу или ошибка из-за отсутствия страницы) и остановит выполнение программы. Если вы увидите сообщения такого типа, то всегда существует вероятность того, что вы непра- вильно инициализировали указатель.

 

57