web-dev-qa-db-fra.com

Qu'est-ce que SEGV_MAPERR?

Quel est SEGV_MAPERR, pourquoi propose-t-il toujours SIGSEGV?

69
Geek

Il existe deux types courants de SEGV , qui est une erreur résultant d'un accès à la mémoire non valide:

  1. Une page a été accédée qui avait les mauvaises autorisations. Par exemple, il était en lecture seule mais votre code a essayé d'y écrire. Cela sera signalé comme SEGV_ACCERR .
  2. Une page a été consultée qui n'est même pas mappée du tout dans l'espace d'adressage de l'application. Cela résultera souvent du déréférencement d'un pointeur nul ou d'un pointeur endommagé avec une petite valeur entière. Ceci est signalé comme SEGV_MAPERR .

La documentation d'une sorte (code source Linux indexé) pour SEGV_MAPERR est ici: http://lxr.free-electrons.com/ident?i=SEGV_MAPERR .

167
ahcox

C'est une faute de segmentation. Très probablement un problème de pointeur suspendu ou une sorte de débordement de tampon.

SIGSSEGV est le signal qui le termine en fonction du problème, faute de segmentation.

Vérifiez les pointeurs pendants ainsi que le problème de débordement.

L'activation des vidages mémoire vous aidera à déterminer le problème.

38
Sev