Висячий указатель или висячая ссылка (англ. Dangling pointer, wild pointer, dangling reference) — указатель, не указывающий на допустимый объект соответствующего типа. Это особый случай нарушения безопасности памяти.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/f/f1/Dangling_Pointer.pdf/page1-220px-Dangling_Pointer.pdf.jpg)
Висячие указатели возникают тогда, когда объект удалён или перемещён без изменения значения указателя на нулевое, так что указатель все ещё указывает на область памяти, где ранее хранились данные. Поскольку система может перераспределить ранее освобождённую память (в том числе в другой процесс), то оборванный указатель может привести к непредсказуемому поведению программы. В случае, когда программа записывает данные в память, используя такой указатель, данные могут незаметно разрушаться, что приводит к тонким ошибкам, которые очень трудно найти.
Этот вид ошибок очень опасен, и наряду с утечками памяти случается довольно часто.
Ряд языков снижают вероятность появления висячих указателей, в частности, используя автоматическую сборку мусора[1] или иными методами[2], повышая безопасность доступа к памяти.
Примечания
править- ↑ Automatic Reference Counting on iOS | Dr Dobb’s . Дата обращения: 17 сентября 2016. Архивировано из оригинала 16 августа 2012 года.
- ↑ https://doc.rust-lang.org/nomicon/meet-safe-and-unsafe.html Архивная копия от 30 апреля 2018 на Wayback Machine « Rust. All the core language cares about .. Dereferencing null or dangling pointers»
Ссылки
править- Ссылка в никуда, или сломанный указатель
- Dangling Pointer. Smashing the Pointer for Fun and Profit / Watchfire, 2007 (англ.)