Кент Рейсдорф. BORLAND C++BUILDER. Раздел 3

Кент Рейсдорф. BORLAND C++BUILDER. Страница 324

Неинициализированные указатели

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

Удаление ранее удаленных указателей

Удаление указателя, который уже был удален, приведет к GPF. Совет, данный для работы с неинициализированными указателями, применим и здесь: присваивайте любому удаляемому указателю значение NULL или 0. В Си++ удаление NULL-указателя совершенно безопасно. Присваивая уда­ляемым указателям значение NULL, вы можете быть уверены, что случайное удаление указателя во второй раз не вызовет никаких вредных последствий.

Выход за границу массива

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

Web-дизайн (с) 2010 All rights reserved