Dalam ilmu komputer, kesalahan segmentasi atau galat segmentasi (bahasa Inggris: segmentation fault, sering disingkat menjadi segfault atau secara resmi diklasifikasikan sebagai pelanggaran akses di lingkungan Windows) adalah kondisi galat fatal yang dipicu oleh perangkat keras komputer bersistem manajemen memori ketika sebuah program komputer mencoba mengakses lokasi memori yang dilarang atau tidak valid.[1]

Kondisi ini merupakan salah satu mekanisme pertahanan terpenting pada sistem operasi modern untuk menjaga keamanan memori. Dengan membatasi ruang gerak setiap aplikasi agar hanya beroperasi di dalam ruang alamat (address space) miliknya sendiri, sistem operasi dapat mencegah sebuah aplikasi yang rusak atau jahat menimpa data milik aplikasi lain atau merusak data sensitif milik kernel sistem operasi utama.

Penyebab umum

sunting

Kesalahan segmentasi hampir selalu disebabkan oleh adanya kutu pemrograman (software bug) di dalam kode sumber yang melakukan manipulasi alamat memori tingkat rendah secara keliru. Beberapa pemicu paling umum meliputi:

  • Dereferensi penunjuk nol (Null Pointer Dereference): Mencoba membaca atau menulis data melalui sebuah variabel penunjuk yang masih bernilai kosong atau menunjuk ke alamat 0x0 (alamat terlindung).
  • Limpahan penyangga (Buffer Overflow): Menulis data melampaui batas alokasi akhir suatu larik sehingga meluap dan menerobos area segmen memori tetangga yang dilindungi.
  • Penunjuk menjuntai (Dangling Pointer): Menggunakan penunjuk untuk mengakses lokasi memori yang statusnya sudah dibebaskan (di-free atau dihapus) oleh sistem.
  • Limpahan tumpukan (Stack Overflow): Pemanggilan fungsi rekursif yang terlalu dalam dan tidak berujung sehingga menghabiskan seluruh kapasitas ruang memori tumpukan panggilan (call stack).

Contoh kasus

sunting

Berikut adalah contoh kode sumber sederhana dalam bahasa C yang dipastikan akan memicu kesalahan segmentasi seketika saat dieksekusi karena mencoba menulis data ke lokasi yang ditunjuk oleh penunjuk nol:

#include <stdio.h>

int main() {
    int *ptr = NULL; // Mendeklarasikan penunjuk yang mengarah ke nol
    *ptr = 99;       // ERROR: Mencoba menulis nilai ke alamat nol (memicu segfault)
    
    return 0;
}

Penanganan oleh sistem operasi

sunting

Ketika arsitektur prosesor (seperti unit manajemen memori atau MMU) mendeteksi adanya upaya pelanggaran batas memori oleh suatu instruksi program, prosesor akan mengeluarkan interupsi perangkat keras khusus ke sistem operasi.

Sistem operasi kemudian akan mengambil tindakan tegas dengan menghentikan paksa aplikasi tersebut secara tidak terencana (crash) untuk melindungi sistem secara keseluruhan.

  • Pada sistem mirip Unix (seperti Linux, macOS, atau FreeBSD), sistem operasi akan mengirimkan sinyal khusus bernama SIGSEGV (singkatan dari Signal Segmentation Violation) ke proses aplikasi yang bermasalah. Umumnya sistem juga akan mencetak tulisan "Segmentation fault" pada terminal konsol dan menghasilkan berkas core dump untuk membantu pemrogram melakukan pengawakutuan.
  • Pada sistem Microsoft Windows, kondisi ini ditangani melalui mekanisme penanganan eksepsi terstruktur (SEH) dengan kode kesalahan spesifik 0xC0000005 (Access Violation).

Lihat pula

sunting

Referensi

sunting
  1. ^ Black, Paul E. "segmentation fault". Dictionary of Algorithms and Data Structures (dalam bahasa Inggris). National Institute of Standards and Technology. Diakses tanggal 2 Juni 2026.

📚 Artikel Terkait di Wikipedia

Penunjuk (ilmu komputer)

fisik (seperti kartu grafis atau cip pengendali). Penunjuk nol atau null pointer adalah penunjuk yang memiliki nilai khusus yang menandakan bahwa ia tidak

0 (angka)

untaian. Simbol 0 juga digunakan sebagai cara standar untuk merujuk null pointer di kode. Banyak API dan sistem operasi mengharuskan aplikasi menghasilkan

Mogok (komputasi)

sistem operasi, seperti melakukan dereferensi terhadap penunjuk nol (null pointer) atau memicu kesalahan segmentasi (segmentation fault). Limpahan penyangga

Register prosesor

untuk menyimpan data internal prosesor, seperti halnya instruction pointer, stack pointer, dan status register. Register yang spesifik terhadap model mesin

Zig (bahasa pemrograman)

jalur eksekusi hanya menggunakan pointer ketika berada dalam kondisi valid, sehingga mencegah kesalahan seperti null pointer dereference. Keunggulan pendekatan

Objective-C

ke pemanggil. Pointer objek yang tidak valid memiliki nilai nil; pernyataan kondisional seperti if memperlakukan nil seperti pointer null, sehingga kode

Referensi (ilmu komputer)

menyalin seluruh data tersebut secara fisik. Berbeda dengan penunjuk (pointer) tradisional, referensi dirancang dengan tingkat abstraksi yang lebih tinggi

Larik

sederhana, tidak memerlukan memori tambahan untuk menyimpan penunjuk (pointer) rujukan antarsimpul seperti pada senarai berantai. Kekurangan larik: Ukuran