Что такое 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
Антти Хаапала
2
Типов SEGV еще больше: elixir.free-electrons.com/linux/latest/source/include/uapi/…
tomasz
40

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

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

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

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

Сев
источник