SEGV_MAPERR คืออะไร


คำตอบ:


198

SEGVทั่วไปมีสองประเภทซึ่งเป็นข้อผิดพลาดที่เกิดจากการเข้าถึงหน่วยความจำไม่ถูกต้อง:

  1. มีการเข้าถึงเพจซึ่งมีสิทธิ์ที่ไม่ถูกต้อง เช่นเป็นแบบอ่านอย่างเดียว แต่โค้ดของคุณพยายามเขียนลงไป นี้จะมีการรายงานเป็นSEGV_ACCERR
  2. มีการเข้าถึงเพจซึ่งไม่ได้แมปลงในพื้นที่ที่อยู่ของแอปพลิเคชันเลยด้วยซ้ำ ซึ่งมักจะเป็นผลมาจากการยกเลิกการอ้างอิงตัวชี้ค่าว่างหรือตัวชี้ที่เสียหายด้วยค่าจำนวนเต็มขนาดเล็ก นี้มีรายงานเป็นSEGV_MAPERR

เอกสารการจัดเรียง (การจัดทำดัชนีรหัสที่มาลินุกซ์) สำหรับ SEGV_MAPERR อยู่ที่นี่: http://lxr.free-electrons.com/ident?i=SEGV_MAPERR


8
เหตุใดstackoverflow.com/a/1000010/358475จึงถูกทำเครื่องหมายว่าเป็นคำตอบเมื่อคำตอบนี้สมบูรณ์และเป็นประโยชน์มากกว่า
OldPeculier

2
คำถามและคำตอบอื่น ๆ นั้นเก่ากว่าคำตอบของฉันมาก ฉันได้แก้ไขคำตอบอื่นเพื่อปรับปรุงอย่างน้อยที่สุด
ahcox

เป็นเรื่องน่าสนใจที่จะทราบสถานการณ์ที่ทำให้เกิดความแตกต่างจากประเภทข้อยกเว้น EXC_BAD_ACCESS เช่นเพจถูกแมป แต่ไม่ได้รับการจัดสรร (/ เพิ่งยกเลิกการจัดสรร)?
Bobjt

6
ตัวอย่างหนึ่งSEGV_MAPERRคือ stack overflow (ไม่มีการเล่นสำนวน) : D
Antti Haapala

2
ยังมี SEGV อีกหลายประเภท: elixir.free-electrons.com/linux/latest/source/include/uapi/…
tomasz

40

มันเป็นข้อผิดพลาดในการแบ่งกลุ่ม ส่วนใหญ่อาจเป็นปัญหาตัวชี้ห้อยหรือบัฟเฟอร์ล้น

SIGSSEGV เป็นสัญญาณที่ยุติมันตามปัญหาความผิดพลาดในการแบ่งส่วน

ตรวจสอบตัวชี้อันตรายและปัญหาการล้น

การเปิดใช้งานการทิ้งหลักจะช่วยให้คุณระบุปัญหาได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.