Что такое SEGV_MAPERR?


Ответы:


197

Существует два распространенных типа SEGV , который является ошибкой, возникающей из-за недопустимого доступа к памяти:

  1. Доступ к странице с неправильными разрешениями. Например, он был доступен только для чтения, но ваш код пытался писать в него. Об этом будет сообщено как SEGV_ACCERR .
  2. Был осуществлен доступ к странице, которая даже не отображается в адресное пространство приложения. Это часто происходит в результате разыменования нулевого указателя или указателя, который был поврежден небольшим целочисленным значением. Об этом сообщается как SEGV_MAPERR .

Документация по сортировке (индексированный исходный код Linux) для SEGV_MAPERR находится здесь: http://lxr.free-electrons.com/ident?i=SEGV_MAPERR .


8
Почему stackoverflow.com/a/1000010/358475 помечен как ответ, когда этот более полный и полезный?
OldPeculier

2
Вопрос и другой ответ намного старше моего ответа. Я отредактировал другой ответ, чтобы хотя бы улучшить его.
ahcox

Было бы интересно узнать обстоятельства, которые отличают их от типов исключений EXC_BAD_ACCESS. например, страница отображается, но не выделена (/ недавно освобождена)?
Bobjt 01

6
Одним из примеров SEGV_MAPERRявляется переполнение стека (без каламбура). : D
Антти Хаапала


40

Это ошибка сегментации. Скорее всего, проблема с зависшим указателем или какое-то переполнение буфера.

SIGSSEGV это сигнал, который завершает его в зависимости от проблемы, ошибки сегментации.

Проверьте наличие висячих указателей, а также проблему переполнения.

Включение дампа ядра поможет вам определить проблему.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.