ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 10) онлайн
Отладка указателей
Указатели могут быть источником таинственных и катастрофических ошибок программы. Наиболее часто встречающейся ошибкой является указатель, кото- рому не присвоили значение перед использованием. В этом случае указатель мо- жет указать на любой участок памяти. Это может быть участок, занимаемый ко- дом вашей программы или операционной системой. Если затем в память будет помещено некоторое значение с использованием этого указателя, то оно может записаться вне программы, и компьютер продемонстрирует вам весьма неожи- данный результат.
Отдельной версией этой проблемы является случай, когда указатель указы- вает на адрес NULL. Например, это может случиться, если указатель опреде- лен как глобальная переменная, так как глобальные переменные автоматиче- ски инициализируются 0. Вот небольшая программа, демонстрирующая такую ситуацию:
int* intptr; // глобальная переменная инициализируется нулем
void main ( ) {
*intptr = 37; // нельзя поместить значение 37 по адресу // intptr, так как значение intptr равно // 0, а это является некорректным значением // для указателя
}
При определении указателю intptr будет присвоено значение 0, так как он яв- ляется глобальной переменной. В строке программы происходит попытка по- местить значение 37 по адресу NULL.
Однако встроенная в компилятор проверка ошибок при запуске остановится при попытке доступа к адресу NULL, выведет сообщение об ошибке (это может быть нарушение доступа, присвоение значения нулевому адресу или ошибка из-за отсутствия страницы) и остановит выполнение программы. Если вы увидите сообщения такого типа, то всегда существует вероятность того, что вы непра- вильно инициализировали указатель.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
