Skip to main content

Что такое висячий указатель?

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

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

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

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

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

До 2007 года висячий указатель теоретически создавал проблемы безопасности. Затем компания-разработчик Watchfire® разработала программу, которая показала, как можно использовать висячие указатели, превращая угрозу безопасности в реальность. Хакеры могут проникнуть в программу с помощью этой ошибки и могут внедрить свой собственный код в некорректную программу.