SEGV_MAPERR nedir?


Yanıtlar:


197

Geçersiz bellek erişiminden kaynaklanan bir hata olan iki yaygın SEGV türü vardır :

  1. Yanlış izinlere sahip bir sayfaya erişildi. Örneğin, salt okunurdu ancak kodunuz ona yazmaya çalıştı. Bu SEGV_ACCERR olarak bildirilecektir .
  2. Uygulamanın adres alanına hiç eşlenmemiş bir sayfaya erişildi. Bu genellikle bir boş göstericinin veya küçük bir tamsayı değeriyle bozulmuş bir göstericinin başvurusunun kaldırılmasından kaynaklanır. Bu SEGV_MAPERR olarak rapor edilir .

SEGV_MAPERR için bir sıralama (indekslenmiş Linux kaynak kodu) dokümantasyonu burada: http://lxr.free-electrons.com/ident?i=SEGV_MAPERR .


8
Bu daha eksiksiz ve yararlı olduğunda stackoverflow.com/a/1000010/358475 neden yanıt olarak işaretleniyor?
OldPeculier

2
Soru ve diğer cevap, cevabımdan çok daha eskidir. En azından iyileştirmek için diğer yanıtı düzenledim.
ahcox

Bunları EXC_BAD_ACCESS istisna türlerinden ayıran koşulları bilmek ilginç olacaktır. Örneğin, sayfa eşlendi ancak tahsis edilmedi mi (/ yakın zamanda serbest bırakıldı)?
Bobjt

6
Bunun bir örneği SEGV_MAPERRyığın taşmasıdır (kelime oyunu değildir). : D
Antti Haapala


40

Bu bir segmentasyon hatası. Büyük olasılıkla sarkan bir işaretçi sorunu veya bir çeşit arabellek taşması.

SIGSSEGV soruna, segmentasyon hatasına göre onu sonlandıran sinyaldir.

Sarkan işaretçileri ve taşma sorununu kontrol edin.

Temel dökümleri etkinleştirmek, sorunu belirlemenize yardımcı olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.