สาเหตุหลักของ Segmentation Fault คือการเข้าถึงหน่วยความจำที่ไม่ได้จองไว้ ไม่ได้เริ่มต้นค่า เกินขอบเขต หรือพยายามแก้ไขสตริงค่าคงที่ รายการสาเหตุทั่วไป:
- เข้าถึงอาร์เรย์เกินขอบเขต (out of bounds)
- ถอดอ้างอิงพอยน์เตอร์ NULL (Dereferencing NULL pointers)
- ถอดอ้างอิงหน่วยความจำที่ปล่อยแล้ว (Dereferencing freed memory)
- ถอดอ้างอิงพอยน์เตอร์ที่ไม่ได้เริ่มต้นค่า
- ใช้งานตัวดำเนินการ
&(address of) และ*(dereference) ผิดวิธี - ตัวระบุรูปแบบใน printf/scanf ไม่ถูกต้อง
- Stack overflow
- เขียนลงหน่วยความจำอ่านอย่างเดียว (read-only memory)
หมายเหตุ: สาเหตุนี้อาจทำให้เกิด segfault แต่ไม่รับประกันว่าจะเกิดทุกครั้ง