NULL Pointer Dereference
NULL banyak dipergunakan untuk beragam keperluan, diantaranya sebagai acuan untuk mengakses suatu file dimana akhir dari suatu file di-set NULL, sehingga jika suatu program membaca file tersebut dan menemukan NULL maka program tersebut akan tahu bahwa sudah mencapai akhir dari file dan berhenti proses membaca.
NULL banyak dipergunakan oleh proses yang menggunakan tipe data pointer,
beberapa contoh yang paling mudah ditemukan adalah aplikasi linked-list. Ujung suatu list umumnya diset NULL, dan proses pada list tersebut akan mengetahui bahwa akhir suatu list telah ditemukan jika telah mencapai NULL.
NULL pointer dereference adalah suatu kondisi dimana proses akan men-dereference suatu pointer yang bernilai NULL.
Mari kita lihat 2 contoh sederhana berikut ini:
Pada contoh pertama, kita memberikan suatu nilai NULL kedalam suatu variable dan melakukan pointer dereference untuk mengakses data tersebut. Saat program dijalankan maka tidak memberikan hasil apapun, hal ini disebabkan NULL adalah ‘kosong’ dan ketika diakses hasilnya adalah…well, kosong :)
Pada contoh kedua, terjadi suatu hal menarik. Program tersebut mendefinisikan suatu pointer sebagai NULL, dan apa yang terjadi ketika program tersebut berusaha untuk men-dereference NULL? hasilnya adalah “Segmentation fault”.
Segmentation fault adalah kondisi dimana sistem operasi akan men-terminate suatu aplikasi karena berusaha mengakses bagian terlarang dari memory. Kondisi ini bisa diakibatkan misalnya ketika suatu aplikasi hendak menulis lokasi dimemory yang telah diset sebagai read only, atau berusaha mengakses (execute) bagian memory yang telah diset read write. Segmentation fault pada NULL pointer dereference memiliki alasan yang bisa dikatakan sama, dan penjelasan mendetail akan diberikan pada sub-bagian berikutnya. Namun yang pasti pada tahap ini kita telah memahami bahwa NULL pointer dereference akan mengakibatkan segmentation fault dan membuat aplikasi di-terminate (berhenti) oleh sistem operasi.