SIGSEGV
| Опис | Помилка трансляції адреси (не може бути перехопленим або проігнорованим) |
|---|---|
| Дія за замовчуванням | Завершує процес |
| SA_SIGINFO macros | |
| None
| |
SIGSEGV — сигнал на POSIX-сумісних платформах, який посилається процесу при спробі адресування пам'яті, яка не належить процесу. Макрос SIGSEGV оголошений у заголовному файлі <signal.h> як макрос-числова константа. Текстові імена для сигналів використовуються через те, що їхні номери залежать від конкретної платформи.
Етимологія
SIG є загальноприйнятим префіксом для назв сигналів. SEGV англ. segmentation violation — означає помилка сегментації.
Використання
У сучасних ОС із віртуальною пам’яттю (зокрема у UNIX‑подібних) при спробі доступу до невідведеної або захищеної сторінки ядро системи генерує SIGSEGV і надсилає його процесу, що зазвичай призводить до його аварійного завершення. Одними з найпоширеніших причин SIGSEGV є:
- Вихід за межі масиву;
- Звернення до нульового вказівника;
- Доступ до раніше виділеної, але неініціалізованої пам'яті;
- Спроба запису в пам'ять, призначену тільки для читання;
Приклад
Програма мовою C, що намагається виконати запис в комірку пам'яті з адресою 0:
int main()
{
*(int *)0 = 1;
return 0;
}
В UNIX-системах її виконання призводить до генерації сигналу SIGSEGV.