SIGSEGV

Матеріал з Вікіпедії — вільної енциклопедії.
Версія від 13:15, 12 травня 2020, створена BunykBot (обговорення | внесок) (заміна застарілого тегу source)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку
SIGSEGV
Опис Помилка трансляції адреси (не може бути перехопленим або проігнорованим)
Дія за замовчуванням Завершує процес
SA_SIGINFO macros

None


SIGSEGVсигнал на POSIX-сумісних платформах, який посилається процесу при спробі адресування пам'яті, яка не належить процесу. Символьна змінна SIGSEGV оголошена у заголовному файлі signal.h. Символьні імена для сигналів використовуються через те, що їхні номери залежать від конкретної платформи.

Етимологія

[ред. | ред. код]

SIG є загальноприйнятий префіксом для назв сигналів. SEGV англ. segmentation violation — означає помилка сегментації.

Використання

[ред. | ред. код]

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

Приклад

[ред. | ред. код]

Програма мовою C, що намагається виконанти запис в комірку пам'яті з одресою 0:

int main()
{
  *(int *)0 = 1;
  return 0;
}

В UNIX-системах її виконання призводить до генерації сигналу SIGSEGV.

Див. також

[ред. | ред. код]