Помилка сегментації
Помилка сегментації (англ. Segmentation fault) — помилка програмного забезпечення, що виникає при спробі звернення до недоступних для запису ділянок пам'яті або при спробі зміни пам'яті забороненим способом.
Сегментна адресація пам'яті є одним із підходів до керування і захисту пам'яті в операційній системі. Для більшості цілей вона була витіснена сторінковою пам'яттю, проте в документаціях за традицією використовують термін «Помилка сегментації». Деякі операційні системи до сих пір використовують сегментацію на деяких логічних рівнях, а сторінкова пам'ять використовується як основна політика управління пам'яттю.
В UNIX-подібних операційних системах процес, який звертається до недійсних ділянок пам'яті, отримує сигнал SIGSEGV. У Microsoft Windows цей процес створює виняток STATUS_ACCESS_VIOLATION, і, як правило, запускає програму налагоджувача Dr. Watson, яка показує користувачеві вікно з пропозицією відправити звіт про помилку Microsoft.
Приклад
Приклад коду мовою ANSI C, який, як правило, призводить до помилки сегментації на платформах із захистом пам'яті:
const char *s = "hello world";
*(char *)s = 'H';
Коли програма, що містить цей код, буде скомпільована, рядок «hello world» буде розміщений в секції програми з бінарної позначкою «тільки для читання». При запуску операційна система поміщує її з іншими рядками і константами в сегмент пам'яті, призначений тільки для читання. Після запуску змінна s вказує на адресу рядка, а спроба привласнити значення символьної константи H через змінну в пам'яті призводить до помилки сегментації.