Ошибка сегментации возникает, когда программа пытается получить доступ к ячейке памяти, к которой ей не разрешён доступ, или пытается получить доступ к ячейке памяти недопустимым способом. 2
Некоторые типичные причины ошибки сегментации:
- Попытка доступа к несуществующему адресу памяти (вне адресного пространства процесса). 2
- Попытка доступа к памяти, на которую программа не имеет прав (например, к структурам ядра в контексте процесса). 2
- Попытка записи в постоянную память (например, сегмент кода). 2
- Ошибки программирования, которые приводят к недопустимому доступу к памяти: разыменование нулевого указателя, неинициализированного указателя, освобождённого указателя. 2
- Переполнение стека из-за нехватки памяти в стеке. 4 Это может произойти из-за большого размера массива, большого количества рекурсивных вызовов, множества локальных переменных и т. д.. 4
- Переполнение буфера, если данные, хранящиеся в буфере, больше выделенного размера буфера. 4
Также ошибка сегментации может возникать из-за несовместимых версий библиотек и ПО. 1
Изредка могут возникать неискоренимые ошибки сегментации, которые ничем не удаётся объяснить. 5 Возможно, в таких случаях дело в несовместимости с железом конкретной машины. 5