Cos'è SEGV_MAPERR?


Risposte:


197

Esistono due tipi comuni di SEGV , ovvero un errore derivante da un accesso alla memoria non valido:

  1. È stato eseguito l'accesso a una pagina con le autorizzazioni sbagliate. Ad esempio, era di sola lettura ma il tuo codice ha provato a scriverci. Questo verrà segnalato come SEGV_ACCERR .
  2. È stato eseguito l'accesso a una pagina che non è nemmeno mappata nello spazio degli indirizzi dell'applicazione. Ciò risulterà spesso dalla dereferenziazione di un puntatore nullo o di un puntatore danneggiato con un valore intero piccolo. Questo è segnalato come SEGV_MAPERR .

La documentazione di un tipo (codice sorgente Linux indicizzato) per SEGV_MAPERR è qui: http://lxr.free-electrons.com/ident?i=SEGV_MAPERR .


8
Perché stackoverflow.com/a/1000010/358475 è contrassegnato come risposta quando questa è più completa e utile?
OldPeculier

2
La domanda e l'altra risposta sono molto più antiche della mia risposta. Ho modificato l'altra risposta per migliorarla almeno.
ahcox

Sarebbe interessante conoscere le circostanze che differenziano questi dai tipi di eccezione EXC_BAD_ACCESS. es. la pagina è mappata ma non allocata (/ recentemente deallocata)?
Bobjt

6
Un esempio SEGV_MAPERRè lo stack overflow (nessun gioco di parole). : D
Antti Haapala


40

È un difetto di segmentazione. Molto probabilmente un problema con il puntatore sospeso o una sorta di overflow del buffer.

SIGSSEGV è il segnale che lo termina in base al problema, errore di segmentazione.

Verificare la presenza di puntatori penzolanti e il problema di overflow.

L'abilitazione dei core dump ti aiuterà a determinare il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.