Відмінності між версіями «Висячі вказівники»

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[перевірена версія][перевірена версія]
м (вікіфікація, доповнення, зображення)
 
(Не показана 1 проміжна версія ще одного користувача)
Рядок 1: Рядок 1:
  +
[[Файл:Dangling Pointer.pdf|thumb]]
'''Завислі вказівники''', '''дикі вказівники''' ({{lang-en|dangling pointers, wild pointers}}) у [[програмування|програмуванні]] — [[вказівник]]и, що не вказують на допустимий [[Змінна (програмування)|об'єкт]] відповідного [[Тип даних|типу]]. Це спеціальні випадки порушення безпеки пам'яті.
+
'''Завислі вказівники''', '''дикі вказівники''' ({{lang-en|dangling pointers, wild pointers}}) у [[програмування|програмуванні]] — [[вказівник]]и, що не вказують на допустимий [[Змінна (програмування)|об'єкт]] відповідного [[Тип даних|типу]]. Це спеціальні випадки порушення [[Безпека доступу до пам'яті|безпеки пам'яті]].
   
Завислі вказівники виникають тоді, коли об'єкт видалено або переміщено без зміни значення вказівника [[Нульовий вказівник|нульове]], так що вказівник все ще вказує на область пам'яті непереміщених даних. Оскільки система може перерозподілити раніше звільнену пам'ять (у тому числі в інший процес), то обірваний вказівник може призвести до непередбачуваної поведінки програми. У випадку, коли програма записує дані у пам'ять, використовуючи такий вказівник, дані можуть непомітно руйнуватися, що призводить до тонких помилок, які надзвичайно важко знайти.
+
Завислі вказівники виникають тоді, коли об'єкт видалено або переміщено без зміни значення вказівника на [[Нульовий вказівник|нульове]], так що вказівник все ще вказує на область пам'яті непереміщених даних. Оскільки система може перерозподілити раніше звільнену пам'ять (у тому числі в інший процес), то обірваний вказівник може призвести до непередбачуваної поведінки програми. У випадку, коли програма записує дані у пам'ять, використовуючи такий вказівник, дані можуть непомітно руйнуватися, що призводить до тонких помилок, які надзвичайно важко знайти.
   
 
Дикі вказівники виникають, коли вказівник використовується до ініціалізації у відомий стан, що можливо в деяких мовах програмування. Вони такі ж непередбачувані як висячі, проте вони мають менше шансів залишитися непоміченими.
 
Дикі вказівники виникають, коли вказівник використовується до ініціалізації у відомий стан, що можливо в деяких мовах програмування. Вони такі ж непередбачувані як висячі, проте вони мають менше шансів залишитися непоміченими.
   
 
Цей вид помилок є дуже небезпечним і поруч з [[Витік пам'яті|витоками пам'яті]] трапляється досить часто.
 
Цей вид помилок є дуже небезпечним і поруч з [[Витік пам'яті|витоками пам'яті]] трапляється досить часто.
  +
  +
Ряд мов програмування знижують вірогідність появи висячих вказівників, використовуючи [[Збирання сміття|автоматичне збирання сміття]]<ref>[http://www.drdobbs.com/mobile/automatic-reference-counting-on-ios/240000820 Automatic Reference Counting on iOS | Dr Dobb’s<!-- Заголовок добавлен ботом -->]</ref> та інші методи<ref>https://doc.rust-lang.org/nomicon/meet-safe-and-unsafe.html « Rust. All the core language cares about .. Dereferencing null or dangling pointers»</ref>, цим самим підвищуючи [[Безпека доступу до пам'яті|безпеку доступу до памяті]].
   
 
== Посилання ==
 
== Посилання ==
 
* [http://www.nestor.minsk.by/kg/2009/45/kg94506.html "Ссылка в никуда, или сломанный указатель" {{ref-ru}}]
 
* [http://www.nestor.minsk.by/kg/2009/45/kg94506.html "Ссылка в никуда, или сломанный указатель" {{ref-ru}}]
  +
* [https://www.blackhat.com/presentations/bh-usa-07/Afek/Whitepaper/bh-usa-07-afek-WP.pdf Dangling Pointer. Smashing the Pointer for Fun and Profit] / Watchfire, 2007{{ref-en}}
 
* [http://www.catb.org/jargon/html/D/dangling-pointer.html "dangling pointer"{{ref-en}}]
 
* [http://www.catb.org/jargon/html/D/dangling-pointer.html "dangling pointer"{{ref-en}}]
  +
  +
== Примітки ==
  +
{{reflist}}
   
 
{{Програмування-доробити}}
 
{{Програмування-доробити}}

Поточна версія на 12:00, 30 квітня 2018

Dangling Pointer.pdf

Завислі вказівники, дикі вказівники (англ. dangling pointers, wild pointers) у програмуваннівказівники, що не вказують на допустимий об'єкт відповідного типу. Це спеціальні випадки порушення безпеки пам'яті.

Завислі вказівники виникають тоді, коли об'єкт видалено або переміщено без зміни значення вказівника на нульове, так що вказівник все ще вказує на область пам'яті непереміщених даних. Оскільки система може перерозподілити раніше звільнену пам'ять (у тому числі в інший процес), то обірваний вказівник може призвести до непередбачуваної поведінки програми. У випадку, коли програма записує дані у пам'ять, використовуючи такий вказівник, дані можуть непомітно руйнуватися, що призводить до тонких помилок, які надзвичайно важко знайти.

Дикі вказівники виникають, коли вказівник використовується до ініціалізації у відомий стан, що можливо в деяких мовах програмування. Вони такі ж непередбачувані як висячі, проте вони мають менше шансів залишитися непоміченими.

Цей вид помилок є дуже небезпечним і поруч з витоками пам'яті трапляється досить часто.

Ряд мов програмування знижують вірогідність появи висячих вказівників, використовуючи автоматичне збирання сміття[1] та інші методи[2], цим самим підвищуючи безпеку доступу до памяті.

Посилання[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Automatic Reference Counting on iOS | Dr Dobb’s
  2. https://doc.rust-lang.org/nomicon/meet-safe-and-unsafe.html « Rust. All the core language cares about .. Dereferencing null or dangling pointers»