O que é SEGV_MAPERR?


Respostas:


200

Existem dois tipos comuns de SEGV , que é um erro resultante de um acesso inválido à memória:

  1. Uma página foi acessada com as permissões erradas. Por exemplo, era somente leitura, mas seu código tentou escrever nele. Isso será relatado como SEGV_ACCERR .
  2. Foi acessada uma página que nem mesmo está mapeada no espaço de endereço do aplicativo. Isso geralmente resultará da desreferenciação de um ponteiro nulo ou um ponteiro corrompido com um valor inteiro pequeno. Isso é relatado como SEGV_MAPERR .

A documentação de um tipo (código-fonte indexado do Linux) para SEGV_MAPERR está aqui: http://lxr.free-electrons.com/ident?i=SEGV_MAPERR .


8
Por que stackoverflow.com/a/1000010/358475 está marcado como a resposta quando esta é mais completa e útil?
OldPeculier

2
A pergunta e outras respostas são muito mais antigas do que minha resposta. Eu editei a outra resposta para pelo menos melhorá-la.
ahcox

Seria interessante saber as circunstâncias que os diferenciam dos tipos de exceção EXC_BAD_ACCESS. por exemplo, a página está mapeada, mas não alocada (/ desalocada recentemente)?
Bobjt 01 de

6
Um exemplo de SEGV_MAPERRestouro de pilha (sem trocadilhos). : D
Antti Haapala


40

É uma falha de segmentação. Muito provavelmente um problema de ponteiro pendurado ou algum tipo de estouro de buffer.

SIGSSEGV é o sinal que o encerra com base no problema, falha de segmentação.

Verifique se há ponteiros pendentes, bem como o problema de estouro.

A ativação de core dumps o ajudará a determinar o problema.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.