SIGSEGV

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
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.

Див. також

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