Що таке 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.03.16

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

2
Є ще більше типів SEGV
tomasz

40

Це помилка сегментації. Швидше за все висить проблема покажчика або якесь переповнення буфера.

SIGSSEGV є сигналом, який припиняє його на основі проблеми, помилки сегментації.

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

Увімкнення дампів ядра допоможе вам визначити проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.