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 .

ahcox
fonte
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
2
Existem tipos ainda mais SEGV: elixir.free-electrons.com/linux/latest/source/include/uapi/...
tomasz
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.

Sev
fonte